【问题标题】:ng-token-auth passwordResetSuccessUrl not redirectingng-token-auth passwordResetSuccessUrl 不重定向
【发布时间】:2017-06-29 15:06:15
【问题描述】:

我正在使用前端的 AngularJs 构建一个 Rails 应用程序。重置用户密码时,电子邮件会按预期发送,但重置链接不会重定向到配置的passwordResetSuccessUrl,而只是转到: http://localhost:8000/auth/password/edit?reset_password_token=KNsWjzizNWNsMqzSss8F

如您所见,redirect_url 不存在,我应该在 url 中看到它吗?此外,当点击链接时,应用程序不会触发 auth:password-reset-confirm-success 事件,如 ng-token-auth 文档中所述。

这是请求: {"email":"myemail@gmail.com","redirect_url":"http://localhost:8000/#!/updatePassword"}

响应是一个 500 错误(我觉得这很奇怪,电子邮件已发送并且服务器日志中没有错误)并带有以下消息: {"message":"密码重置邮件已发送"}

下面是一些相关的配置代码:

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'

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

【问题讨论】:

    标签: ruby-on-rails angularjs devise


    【解决方案1】:

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

    覆盖 PasswordsController createupdateeditafter_resetting_password_path_for

    对于 createupdate 函数,主要问题是我需要它来呈现 json 响应,所以在它说类似 respond_with resource 的地方我改为 render json: resource, status: <status>, && return(你可以更改资源和状态你的应用程序需要什么,与渲染方法相同)

    对于edit,我没有使用after_sending_reset_password_instructions_path_for,而是从电子邮件中获取重定向URL,然后简单地执行redirect_to params[:redirect_url]

    我更改了after_resetting_password_path_for 以重定向我希望用户登录的位置。

    我还必须更改reset_password_instructions.html.erb 模板。包含 edit_password_url 的行到此:

    <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,我必须让设计知道使用我的控制器:

    mount_devise_token_auth_for 'User', at: 'auth', controllers: { passwords: 'passwords' }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多