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

RESTful Authentication using Ember and Node/Express and json web tokens, how can I verify users' email addresses?

这是我的工作流程:

  1. Ember 对新用户注册的操作是向 Express 发送用户数据。
  2. Express 然后创建一个网络令牌,加密内容,并在使用 Nodemailer 发送的电子邮件中放入 link。
  3. 邮件发送成功
  4. 用户转到他们的电子邮件并单击 link。
  5. 单击 link,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 数据,而且我不确定在 [=35] 中的位置或方式=] 我可以在给定的场景中调用登录操作。

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

我是这样做的:

  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。

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

免责声明:我在 Stormpath and we have a fully-featured email verification workflow in our service. While we don’t have an integration for Ember.js, we do have a good overview of JWTs and Single Page Applications, it may be useful at a high level: Token Based Authentication for Single Page Apps

工作

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