【问题标题】:Cannot access session data in Ember (JWT Token Data)无法访问 Ember 中的会话数据(JWT 令牌数据)
【发布时间】:2019-03-27 06:37:08
【问题描述】:

我正在使用 JWT 身份验证,使用 ember-simple-auth 来实现用户身份验证。我在下面的项目中提供了必要的细节。

当验证正确时,一个 jwt 令牌从由djangorest 组成的后端传递,并且它只包含一个令牌。

/app/authenticators/jwt.js

import Ember from 'ember';
import Base from 'ember-simple-auth/authenticators/base';
import config from '../config/environment';

const { RSVP: { Promise }, $: { ajax }, run } = Ember;
export default Base.extend({

  tokenEndpoint: `http://localhost:8000/auth`,

  restore(data) {
    return new Promise((resolve, reject) => {
      // console.log(data.token); token seems empty
      if (!Ember.isEmpty(data.token)) {
        resolve(data);
      } else {
        reject();
      }
    });
  },

  authenticate(creds) {
    const { identification, password } = creds;
    const data = JSON.stringify({
        email: identification,
        password: password
    });
    const requestOptions = {
      url: this.tokenEndpoint,
      type: 'POST',
      data,
      contentType: 'application/json',
      dataType: 'json'
    };
    return new Promise((resolve, reject) => {
      ajax(requestOptions).then((response) => {
        // console.log(response); verified
        const { jwt } = response;
        // Wrapping aync operation in Ember.run
        run(() => {
          resolve({
            token: jwt
          });
        });
      }, (error) => {
        // Wrapping aync operation in Ember.run
        run(() => {
          reject(error);
        });
      });
    });
  },

   invalidate(data) {
     return Promise.resolve(data);
   }
});

/app/authorizer/custom.js

import Base from 'ember-simple-auth/authorizers/base';
// import Ember from 'ember';
import { inject } from '@ember/service';

export default Base.extend({
  session: inject('session'),
  authorize(data, block) {
    const { token } = data
    if (this.get('session.isAuthenticated') && token) {
      consol.log(token);
      // this._super(...arguments);
      block('Authorization', `JWT ${token}`);
      console.log(Authorization);
    }
  }
});

当我尝试使用 session.data.authenticated.token 访问令牌时,它显示值 undefined

【问题讨论】:

标签: ember.js ember-simple-auth


【解决方案1】:

如果您来自/auth 的回复如下所示:

{access_token: "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NDA0MTU0ODgsInN1YiI6MSwicm9sZSI6MCwibmFtZSI6IlJvYmVydG8iLCJlbWFpbCI6InJwbGFuY2FyQHRlc3QuY29tIn0.okZCipPGuPSmgC5B0h7QkldBkVPDvdut7I7u-fFE61w"}

您可以使用JWT page 对其进行解码,然后检查是否定义了session.session.content.authenticated。它应该保存令牌字符串。如果是,您应该能够对其进行解码并使用这些信息……例如:

tokenData: Ember.computed('session.session.content.authenticated', function(){
  var token = this.get('session.session.content.authenticated');
  var base64Url = token.split('.')[1];
  var base64 = base64Url.replace('-','+').replace('_', '/'); //so the atob function works 
  return JSON.parse(window.atob(base64));
})

您可以将其添加到您的应用程序控制器或使其成为服务以在您的整个网站上使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 2021-02-12
    • 2015-03-20
    • 2019-12-08
    • 2019-05-11
    • 2019-10-23
    • 2013-01-08
    相关资源
    最近更新 更多