使用Ember和Node / Express以及json网络令牌进行RESTful身份验证,如何验证用户'电子邮件地址?

时间:2015-03-06 18:08:14

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

这是我的工作流程:

  1. 对新用户注册的Ember操作是向Express发送用户数据。
  2. Express然后创建一个Web令牌,加密内容,并将链接放入它与Nodemailer一起发送的电子邮件中。
  3. 电子邮件已成功发送。
  4. 用户转到他们的电子邮件并点击该链接。
  5. 点击链接后,Express从查询中获取令牌params解密并解码令牌,并创建一个新用户。
  6. 以上所有方法都可行,但这里是我被困的地方。我希望将用户重定向回Ember前端,并自动登录。这就是我坚持的位置。这是服务器代码:

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

    我能够成功重定向,但我无法在我的余烬代码中捕获json数据,而且我不确定Ember中我可以调用登录操作的位置或方式在给定的场景中。

    我有一种感觉,我的做法可能是错的?因为电子邮件验证是常见的事情。此外,我不必让用户多次输入他们的表单信息。

2 个答案:

答案 0 :(得分:1)

以下是我这样做的方式:

  1. 在Express中,保存用户后将查询参数添加到响应网址:
  2.    
    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 route beforeModel hook中,抓取查询参数:
    2.    
      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 Way,但这里的关键是能够获取转换对象的queryParams。

答案 1 :(得分:0)

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

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

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