如何使用 express api 在 Ember 应用程序中使用 JSON Web Token 实现登录页面

How to implement a login page with JSON Web Token in Ember app with express api

我在 this guide 之后为我的 Express API 添加了身份验证,并且在测试我的秘密路由之后,一切似乎都正常工作。现在我的问题是如何在 Ember 应用程序登录页面中使用它。在成功登录后收到秘密令牌后,浏览器如何知道您已登录。如何注销? ember 应用程序如何知道谁登录了?有什么特别安全的事情是我在处理这个问题时应该尝试的吗?

您应该使用插件来为您处理大部分繁重的工作。

ember-simple-auth-token 有设置说明,让您创建一个登录路由,该路由将采用用户名/密码并将其发送到您的服务器进行验证。令牌响应将在您的应用程序中可用,直到用户注销。

示例看起来像

import Controller from '@ember/controller';
import { inject } from '@ember/service';

export default Controller.extend({
  session: inject('session'),

  actions: {
    authenticate: function() {
      const credentials = this.getProperties('username', 'password');
      const authenticator = 'authenticator:token'; // or 'authenticator:jwt'

      this.get('session').authenticate(authenticator, credentials);
    }
  }
});

您还创建了注销路由,用于处理注销您的应用程序以及向服务器发送任何注销请求。

如果可能,您应该将服务器设置为默认设置,但您几乎可以配置所有内容。

Authentication Options

ENV['ember-simple-auth-token'] = {
  tokenDataPropertyName: 'tokenData'; // Key in session to store token data
  refreshAccessTokens: true, // Enables access token refreshing
  tokenExpirationInvalidateSession: true, // Enables session invalidation on token expiration
  serverTokenRefreshEndpoint: '/api/token-refresh/', // Server endpoint to send refresh request
  refreshTokenPropertyName: 'refresh_token', // Key in server response that contains the refresh token
  tokenExpireName: 'exp', // Field containing token expiration
  refreshLeeway: 0 // Amount of time to send refresh request before token expiration
};

3 年来,我们对这个插件的生产非常满意,我强烈推荐它。