ng-token-auth passwordResetSuccessUrl不重定向

时间:2017-06-29 15:06:16

标签: ruby-on-rails angularjs devise

我正在前端构建一个带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'

如果我能提供任何其他信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

好的,我得到了这个工作,这就是我必须要做的事情让它与AngularJS前端和Rails一起工作:

覆盖 PasswordsController createupdateeditafter_resetting_password_path_for

对于createupdate函数,主要问题是我需要它来呈现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

我对编辑中的重定向网址部分并不感到兴奋,它有一种我不喜欢的代码味道,但它有效。如果有人在这方面有建议,我将不胜感激!