ng-token-auth和devise token auth确认重定向url

时间:2017-06-23 22:01:58

标签: ruby-on-rails angularjs devise

我知道这已被问了很多,而且我已经看到很多解决方案似乎不适用于我的问题,所以如果我错过了什么,我会道歉。

使用带有ng-token-auth和devise-token-auth的设计视图发送确认电子邮件时,确认电子邮件链接没有redirect_url,并在点击时显示错误页面然而,确认api电话会成功。

ng-token-auth配置中我已设置: confirmationSuccessUrl: 'http://localhost:8000/#!/login'

devise_token_auth.rb {p>我还设置了: config.default_confirm_success_url = 'http://localhost:8000/#!/login'

我也尝试按照许多其他解决方案的建议覆盖ConfirmationsController,但都无济于事。

我通过在confirmation_instructions.html.erb电话中添加redirect_url来修改设计视图confrimation_url,从而临时解决了这个问题:

confirmation_url(@resource, redirect_url:'http://localhost:8000/#!/login', confirmation_token: @token)

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

1 个答案:

答案 0 :(得分:0)

似乎链接始终发送HTTP 406,因此对象始终有错误,但并不总是消息。目前,我通过覆盖确认控制器实现了(一个丑陋的)解决方案:

 def show
    self.resource = resource_class.confirm_by_token(params[:confirmation_token])
    yield resource if block_given?

    if resource.errors.messages.empty?
        set_flash_message!(:notice, :confirmed)
        #respond_with_navigational(resource){ redirect_to after_confirmation_path_for(resource_name, resource) }
        if signed_in?(resource_name)
            #signed_in_root_path(root_path)
            redirect_to root_path + '#!/users/' + resource.id.to_s
        else
            redirect_to root_path + '#!/login'
        end
    else
        respond_with_navigational(resource.errors, status: :unprocessable_entity){ render :new }
    end
end

在最坏的情况下,这将重定向到登录页面。由于确认api呼叫实际上正在运行,因此用户可以登录。如果失败,我可以显示闪烁消息,表明他们应该尝试重新发送确认电子邮件。

如果有人知道更好的解决方案或我做错了导致HTTP 406请告诉我!