首页 > 解决方案 > Nebular - 登录后未正确获取令牌有效负载

问题描述

我正在使用nebularlaravelAPINbPasswordAuthStrategyNbAuthJWTToken类,如下所示:

NbAuthModule.forRoot({
  strategies: [
    NbPasswordAuthStrategy.setup({
      name: 'email',
      token: {
        class: NbAuthJWTToken,
        key: 'data.user.token',
      },
      baseEndpoint: BASE_URL + 'users/',
      login: {
        endpoint: 'login',
        method: 'post',
        redirect: {
          success: '/pages/dashboard',
          failure: null, // stay on the same page
        },
      },
    }),
  ],
  forms: {
    login: {
      rememberMe: false,
    },
    validation: {
      password: {
        minLength: 6,
      },
    },
  },
}),

端点响应如下login

{
"data": {
    "user": {
        "id": 114683,
        "first_name": "mhd",
        "last_name": "sultan",
        ...
        "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vMTI3LjAuMC4xOjgwMDAvYXBpL3VzZXJzL2xvZ2luIiwiaWF0IjoxNTcyMzQ2NDMzLCJleHAiOjE2NjY5NTQ0MzMsIm5iZiI6MTU3MjM0NjQzMywianRpIjoiNmxGaDNwbWd0RVpoa0FPRSIsInN1YiI6MTE0NjgzLCJwcnYiOiI4N2UwYWYxZWY5ZmQxNTgxMmZkZWM5NzE1M2ExNGUwYjA0NzU0NmFhIn0.Eg4_1cXngafs1V80jqygvJDR0vZN5HuHyXV9PTeUkzA",
    }
}}

UserService订阅onTokenChange

constructor(private authService: NbAuthService) {
this.authService.onTokenChange()
  .subscribe((token: NbAuthJWTToken) => {
    console.log(token);
    console.log(token.getPayload());
    if (token.isValid()) {
      this.user = token.getPayload(); // receive payload from token and assign it to our `user` variable
    }
  });}

我正在正确获取令牌, 但我正在获取包含 JWT 令牌属性的有效负载

在此处输入图像描述

我应该怎么做才能得到data.user对象?

标签: angularauthenticationjwt-authnebular

解决方案


您希望从有效负载返回的所有数据都应在创建 jwt 令牌时进行编码:

jwt.sign({
payload,
SECRET,
expiration,
});

然后数据可用token.getPayload()


推荐阅读