【问题标题】:RESTful Authentication using Ember and Node/Express and json web tokens, how can I verify users' email addresses?使用 Ember 和 Node/Express 和 json Web 令牌的 RESTful 身份验证,我如何验证用户的电子邮件地址?
【发布时间】:2015-05-08 10:06:11
【问题描述】:

这是我的工作流程:

  1. Ember 对新用户注册的操作是向 Express 发送用户数据。
  2. Express 然后创建一个 Web 令牌,对内容进行加密,并将链接放入它使用 Nodemailer 发送的电子邮件中。
  3. 邮件发送成功。
  4. 用户转到他们的电子邮件并点击链接。
  5. 点击链接后,Express 从查询参数中获取令牌,解密并解码令牌,并创建一个新用户。

以上所有方法都可以,但这是我卡住的地方。我希望用户被重定向回 Ember 前端,并自动登录。这是我坚持的一点。这是服务器代码:

<!-- language: lang-js -->
signUpUser.save().then(function(model) {
        res.set('location', 'http://localhost:4200/login');
        res.status(302).json({user:model})
});

我能够成功重定向回来,但我无法在我的 ember 代码中捕获 json 数据,而且我不确定在给定场景中我可以在 Ember 中的何处或如何调用登录操作。

我感觉我的方法可能是错误的?因为电子邮件验证是很常见的事情。另外,我宁愿不必让用户多次输入他们的表单信息。

【问题讨论】:

    标签: node.js ember.js express email-verification json-web-token


    【解决方案1】:

    我是这样做的:

    1. 在 Express 中,保存用户后在响应 url 中添加查询参数:
    signUpUser.save().then(function(model) {
        res.set('location', 'http://localhost:4200/login?token=' + token + 'id=' + id);
        res.status(302).json({user:model})
    });
    
    1. 在 Ember 中,在 /login 路由 beforeModel 挂钩中,获取查询参数:
    beforeModel: function(transition) {
        console.log(transition.queryParams.token);
        if (transition.queryParams.token) {
            this.controllerFor('login').send('assignTokenToUser', transition.queryParams.token, transition.queryParams.id);
        };
    
        if (!Ember.isEmpty(this.controllerFor('login').get('token'))) {
            return this.transitionTo('courses');
        }
    }
    

    我不确定这是 Ember 方式,但这里的关键是能够获取转换对象的 queryParams。

    【讨论】:

      【解决方案2】:

      您能否提供更多有关您正在使用的身份验证系统的信息?听起来您正在使用 JWT 来传达有关电子邮件验证的一些信息,但是您如何验证 API 请求呢?您是否使用另一个存储在 cookie 中的 JWT?如果是这样,您希望在他们到达验证 JWT 时创建此 cookie。

      免责声明:我在 Stormpath 工作,我们的服务中有一个功能齐全的电子邮件验证工作流程。虽然我们没有集成 Ember.js,但我们确实对 JWT 和单页应用程序有一个很好的概述,它可能在更高层次上很有用:Token Based Authentication for Single Page Apps

      如果您可以选择切换框架,我们确实有 Angular 集成:Stormpath AngularJS SDK

      【讨论】:

      • 没错,我使用了 2 个不同的 JWT。我用于验证 API 请求的一种。我将它存储在本地存储中,但最近阅读了一篇关于为什么 cookie 更安全的 Stormpath 帖子。并且令牌进入每个请求的授权标头中。另一个 JWT 是我传递加密信息的那个,供用户在单击其电子邮件中的链接时创建一个新用户帐户。
      猜你喜欢
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-12
      相关资源
      最近更新 更多