2

所以我已经设置并运行了 EmberAuth,并且我正在实施用户注册。我的 API 设置为在用户成功注册后返回 auth_token,但我不太确定如何将应用程序移至已登录状态。

我想出的唯一真正有效的解决方案是App.Auth.signIn在成功注册后调用。在“它有效”的意义上这很好,但是当我已经拥有他们的身份验证令牌时,它确实涉及到服务器的不必要的额外往返以使用户登录。

sendRegistration: () ->
  self = @
  $.post('/users', 
    user:
      email: @email,
      password: @password,
      password_confirmation: @passwordConfirmation)
  .done (response) ->
    App.Auth.signIn(
      data:
        email: self.email
        password: self.password
        remember: true
    )
4

2 回答 2

3

ember-auth开发人员在这里。

签出最新版本 ( v7.1.0)。它具有解决此用例的新功能。如果您已经拥有所有身份验证信息,您现在可以直接注入登录会话。只需构造一个预期的“正常”服务器响应,并将其提供给App.Auth.createSession().

示例:如果预期的服务器响应是

{"auth_token":"foo", "user_id": 1, "rmb_token":"bar"}

然后打电话

App.Auth.createSession('{"auth_token":"foo", "user_id": 1, "rmb_token":"bar"}');

这会注入身份验证会话而不会访问服务器。

它在清除会话中的对应物(再次没有击中服务器)是

App.Auth.destroySession();

文档的相关部分是直接会话注入/销毁


为 googlers编辑/更新:语法已随ember-auth 9.x(最新版本)更改。

auth现在是注入到路由、控制器和视图中的对象。所以,如果你在那里进行createSession()anddestroySession()调用,你可以写

this.get('auth').createSession( /* args */ );
this.get('auth').destroySession( /* args */ );

createSession()电话也可以澄清为

this.get('auth').createSession({auth_token: 'foo', user_id: 1, rmb_token: 'bar'});

因为两者createSession()destroySession()现在都接受一个对象。

于 2013-07-10T16:29:12.403 回答
0

我目前正在做同样的事情,提出额外的请求。但我确实对实现进行了一些研究。

Ember-Auth有一个虚拟请求适配器,它只返回而不发出请求,opts.status用于确定要返回的内容。

诀窍是根据需要从实例中切换_request适配器。Auth

该项目使用 EmberScript,它是我不熟悉的 Coffeescript 的扩展。所以现在额外的请求已经足够了。:)

于 2013-07-10T04:55:04.047 回答