我在电子邮件中有一个用于重置用户密码的链接。此链接将用户带到密码重置模板,其中包含重置令牌的参数:
http://localhost:8000/password-reset?token=asldfasjdfalsdf
我需要在电子邮件链接转换时获取PasswordResetController中的令牌。我尝试过使用queryParams,但没有运气。我尝试了下面的代码,也使用了window.location.href,但问题是在加载控制器之前转换到页面的参数。提前感谢您的帮助。
App.NewPasswordController = Ember.Controller.extend
queryParams: ['token']
token: null
actions:
submit: ->
token = @get 'token' # Here lies the culprit.
password = @get 'password'
passwordConfirmation = @get 'passwordConfirmation'
data = JSON.stringify password: password, password_confirmation: passwordConfirmation, token: token
ic.ajax.request(type: 'PUT', url: 'api/v1/password_resets/update', data: data).then (result)=>
console.log result
if result.status == 'ok'
console.log 'ok'
# Log user in
else
console.log 'Error: ForgotPasswordController#submit'
之前我曾尝试过查询参数,但刚刚在今天的文档中看到,您必须使用其中一个较新的Ember版本才能使用它。我切换到1.7.0-beta.4并且查询params现在工作得很好。
App.NewPasswordController = Ember.Controller.extend
queryParams: ['token']
token: null
actions:
submit: ->
token = @get 'token'
答案 0 :(得分:1)
您可以使用Query Params执行此操作。您需要使用如下功能标志激活该功能:
Ember.FEATURES['query-params-new'] = true;
然后在您的控制器中,执行:
App.NewPasswordController= Ember.ObjectController.extend({
queryParams: ['token'],
token: null
});
然后您可以正常获取令牌属性。
你需要一个更新版本的Ember.js来实现这一点,比如1.6。
答案 1 :(得分:1)
如果您不想在Ember的beta版本中使用功能标记来激活查询参数,则可以在应用程序初始化之前捕获查询字符串。 这非常hacky 但允许您捕获要在Ember应用中使用的令牌。在Em.Application.create()
:
window.queryStr = (function(name) {
var urlSplit = window.location.href.split('?');
return urlSplit.length > 1 ? urlSplit[1] : null;
})();
然后您可以在您的Ember应用中访问window.queryStr
。
不言而喻,一旦Query Params处于Ember的稳定版本中,您觉得使用起来就应该使用Ember的核心查询参数功能而不是上述方法。