当前位置: 首页 > 知识库问答 >
问题:

如何使用JWT身份验证获取登录用户信息?

费和惬
2023-03-14

现在,使用这些标记,我在api文件中创建了一个函数,但它将<code>0

'Content-type': 'application/json', 
'Authorization': 'Bearer token_value'

函数代码:

function get_loggedin_user_info(){
  global $current_user; 

  $current_user = wp_get_current_user();
  print_r($current_user);
}

add_action( 'rest_api_init', function () {
    register_rest_route( 'endpoints/v1', '/logininfo', array(
            'methods' => 'POST',
            'callback' => 'get_loggedin_user_info'
    ));
});

那么,如何使用WordPress hook<code>wp_get_current_user()获取登录用户数据呢?

其次,我如何使< code > jwt-auth/v1/token API动态获取用户名和密码?

P. S我在htacceess文件中添加了ReWriteCond和ReWriteRur,并且在我的配置文件中还包含了JWT Auth Secret密钥。

define('JWT_AUTH_SECRET_KEY', 'secret-key');
define('JWT_AUTH_CORS_ENABLE', true);

共有2个答案

田晨
2023-03-14

请注意,您还可以在成功登录时修改JWT响应:

function mod_jwt_auth_token_before_dispatch( $data, $user ) {
    $user_info = get_user_by( 'email',  $user->data->user_email );
    $profile = array (
        'id' => $user_info->id,
        'user_first_name' => $user_info->first_name,
        'user_last_name' => $user_info->last_name,
        'user_email' => $user->data->user_email,
        'user_nicename' => $user->data->user_nicename,
        'user_display_name' => $user->data->display_name,
        'phone' => get_field( 'phone', "user_$user_info->id" ) // you also can get ACF fields
    );
    $response = array(
        'token' => $data['token'],
        'profile' => $profile
    );
    return $response;
}
add_filter( 'jwt_auth_token_before_dispatch', 'mod_jwt_auth_token_before_dispatch', 10, 2 );

这样,您就不需要调用另一个endpoint来从用户获取更多数据。

当用户返回到您的站点/应用程序时,请记住首先验证令牌,然后调用/users/meendpoint。

同样,如果您想返回有关user/me的更多信息,您可以这样做:

    function add_custom_fields() {
        register_rest_field(
            'user', 
            'profile',
            array(
                'get_callback'    => 'get_custom_fields',
                'update_callback' => null,
                'schema'          => null,
            )
        );
    }
    add_action( 'rest_api_init', 'add_custom_fields' );

    function get_custom_fields( $object, $field_name, $request ) {
        $user_info = get_user_by( 'id',  $object['id'] );
        $profile = array (
            'id' => $user_info->id,
            'user_first_name' => $user_info->first_name,
            'user_last_name' => $user_info->last_name,
            'user_email' => $user_info->user_email,
            'user_nicename' => $user_info->user_nicename,
            'user_display_name' => $user_info->display_name,
        );
        return $profile;
    }
糜雪峰
2023-03-14

你可以使用这个路由: /wp-json/wp/v2/users/me

将令牌发送到此路由,并获取用户的详细信息

如果你有任何问题,我在这里:)

 类似资料:
  • 该应用程序应该接受用户电子邮件和密码,并使用Firebase身份验证作为后端。我使用像素2作为模拟器。每次应用程序处理登录功能时,它都会崩溃。 下面是Java文件和gradle文件 Java文件:

  • 问题内容: 因此,我目前正在运行已安装ldapjs的node.js。 我的目标是拥有一个使用ldapjs的系统,以允许用户使用用户名和密码登录。 我已经阅读了一段时间的http://ldapjs.org文档,但是正在努力理解ldap的整个思想以及ldapjs的实现。 我目前在文档中有这个 这使我可以运行以下内容并成功绑定到服务器。 但是我真的不确定从这里走到哪里,即使这是正确的方法… 理想的设置是

  • 我有一个Rest Spring BootAPI,当用户验证API返回令牌jwt时,我在浏览器中注意到该令牌出现在响应头中 如何通过Reactjs将此令牌存储在本地存储浏览器中? 我的请求代码如下所示:

  • 如何在iOS8中使用CloudKit实现Sign sign-on? 我知道你可以得到一个代表你的登录用户的字符串,这是你的应用程序唯一的,但是我如何在我的后端验证那个字符串呢? 我明白Apple ID/iCloud电子邮件地址是出于隐私原因而隐藏的。 我的后端是Azure中的ASP.NET Web API2,但如果更简单的话,我可以用另一种技术实现它。 我正在寻找相当于谷歌在Android上的单点

  • 我正在使用SpringBoot开发具有微服务架构的Rest Backend。为了保护endpoint,我使用了JWT令牌机制。我正在使用Zuul API网关。 如果请求需要权限(来自JWT的角色),它将被转发到正确的微服务。Zuul api网关的“WebSecurityConfigrerAdapter”如下。 这样,我必须在这个类中编写每个请求授权部分。因此,我希望使用方法级安全性,即“Enabl

  • jwt不应该仅仅用于认证用户吗?我读到过可以在里面存储非敏感的东西,比如用户ID。将权限级别之类的东西存储在令牌中可以吗?这样我可以避免数据库调用。