0

这是我的工作流程:

  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 中的何处或如何在给定场景中调用登录操作。

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

4

2 回答 2

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。

于 2015-03-06T20:54:46.580 回答
0

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

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

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

于 2015-03-09T15:00:16.810 回答