我正在前端构建一个带AngularJs的rails应用程序。重置用户时#39;密码,电子邮件按预期发送,但重置链接不会重定向到配置的passwordResetSuccessUrl
,只需转到:
http://localhost:8000/auth/password/edit?reset_password_token=KNsWjzizNWNsMqzSss8F
正如您所看到的,redirect_url
不存在,我应该在网址中看到它吗?此外,点击链接时,应用程序不会触发ng-token-auth文档中记录的auth:password-reset-confirm-success
事件。
这里的要求是:
{"email":"myemail@gmail.com","redirect_url":"http://localhost:8000/#!/updatePassword"}
响应是500错误(我发现这很奇怪,电子邮件已发送且服务器日志中没有错误),并显示以下消息: {"消息":"密码重置电子邮件已发送"}
这里有一些相关的配置代码:
function authConfig($authProvider,envServiceProvider) {
let url = envServiceProvider.is('development') ? 'http://localhost:8000' : 'https://miles-board.herokuapp.com';
$authProvider.configure([{
'default': {
apiUrl: url,
emailRegistrationPath: '/users',
confirmationSuccessUrl: window.location.href,
validateOnPageLoad: false,
passwordResetSuccessUrl: url+'/#!/updatePassword'
}},
{'user': {
apiUrl: url,
emailRegistrationPath: '/users',
confirmationSuccessUrl: window.location.href,
validateOnPageLoad: false,
passwordResetSuccessUrl: url+'/#!/updatePassword'
}},
{'team_owner' : {
apiUrl: url,
emailRegistrationPath: '/team_owners',
confirmationSuccessUrl: window.location.href,
validateOnPageLoad: false,
passwordResetSuccessUrl: url+'/#!/updatePassword'
}
}]
);
console.log('is dev: ', envServiceProvider.is('development'))
}
我的电子邮件确认也有问题,所以我认为我在设置中遗漏了一些内容,但我不确定是什么。
对于rails来说,我不得不问一个非常新手的问题:我安装了devise_token_auth
gem,我是否还需要安装devise
,或devise_token_auth
是否包括是什么?
在我的devise_token_auth.rb
初个版中,我也包括了这个:
config.default_password_reset_url = 'http://localhost:8000/#!/updatePassword'
如果我能提供任何其他信息,请告诉我。
答案 0 :(得分:0)
好的,我得到了这个工作,这就是我必须要做的事情让它与AngularJS前端和Rails一起工作:
覆盖 PasswordsController create
,update
,edit
和after_resetting_password_path_for
对于create
和update
函数,主要问题是我需要它来呈现json响应,所以它在respond_with resource
之类的地方改为{{1} (您可以将资源和状态更改为应用程序所需的内容,与render方法相同)
对于render json: resource, status: <status>, && return
,我没有使用edit
,而是从电子邮件中抓取重定向网址,只需执行after_sending_reset_password_instructions_path_for
我更改了redirect_to params[:redirect_url]
以重定向我希望用户登录的位置。
我还必须更改after_resetting_password_path_for
模板。包含 edit_password_url 的行:
reset_password_instructions.html.erb
然后在<p><%= link_to t('.password_change_link'), edit_password_url(@resource, reset_password_token: @token, config: 'default', redirect_url: message['redirect-url'].to_s+'?reset_token='+@token).html_safe %></p>
,我必须让设计知道使用我的控制器:
routes.rb
我对编辑中的重定向网址部分并不感到兴奋,它有一种我不喜欢的代码味道,但它有效。如果有人在这方面有建议,我将不胜感激!