所以我有EmberAuth所有设置和工作,我正在实施用户注册。我的API设置为在用户成功注册后返回auth_token,但我不太确定如何将应用程序移动到signedIn状态。
我提出的唯一解决方案是在成功注册后调用App.Auth.signIn
。这在'it works'意义上是好的,但它确实涉及到什么应该是一个不必要的额外往返服务器,以便在我已经有他们的身份验证令牌时签署用户。
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
)
答案 0 :(得分:3)
ember-auth dev这里。
查看最新版本(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();
docs的相关部分是直接会话注入/销毁。
修改/更新:语法因ember-auth
9.x
(最新版本)而发生变化。
auth
现在是注入路径,控制器和视图的对象。因此,如果您在那里进行createSession()
和destroySession()
调用,则可以编写
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()
现在都接受了一个对象。
答案 1 :(得分:0)
我目前正在做同样的事情,提出额外的请求。但我确实调查了一下实现。
Ember-Auth
有dummy request adapter只返回而不发出请求,使用opts.status
来确定要返回的内容。
诀窍是根据需要从_request
实例切换出Auth
适配器。
该项目使用EmberScript,这是我不熟悉的Coffeescript的扩展。因此额外的请求现在已经足够了。 :)