为了账号安全,请及时绑定邮箱和手机立即绑定

登录失败后设计重定向

/ 猿问

登录失败后设计重定向

FFIVE 2019-11-18 12:56:20

我发现的所有问题都与成功登录帮助程序有关。 after_sign_in_path_for(resource)

我在网站的索引中有一个登录表单,当登录失败时,它将重定向到“ users / sign_in”

但是,登录失败时如何重定向到“ site#index”?


查看完整描述

3 回答

?
莫回无

使用以下命令在您的lib目录中创建一个custom_failure.rb:


class CustomFailure < Devise::FailureApp

  def redirect_url

    your_path

  end


  def respond

    if http_auth?

      http_auth

    else

      redirect

    end

  end

end

在您的Devise初始化程序中,包括:


  config.warden do |manager|

    manager.failure_app = CustomFailure

  end

确保Rails已加载到application.rb中的lib文件中:


config.autoload_paths += %W(#{config.root}/lib)

不要忘记重启服务器。


我认为没有比这更简单的方法了。祝好运。


查看完整回答
反对 回复 2019-11-18
?
不负相思意

如果使用您自己的SessionsController,则可以在运行之前重新分配的:recall值以auth_options重新调用所需的值,例如:controller#methodwarden.authenticate!(auth_options)


在app / controllers / users / sessions_controller.rb中


class Users::SessionsController < Devise::SessionsController

  #...

  def create

    #...

    auth_options = { :recall => 'site#index', :scope => :user }

    resource = warden.authenticate!(auth_options)

    #...

  end

  #...

end

通过这种方式,您无需创建自定义的FailureApp并修改配置。


查看完整回答
反对 回复 2019-11-18
?
凤凰求蛊

这是设计3.1.0发生的情况


Started POST "/users/sign_in"

Processing by Devise::SessionsController#create

Completed 401 Unauthorized

Processing by Devise::SessionsController#new

由于在gems / devise-3.1.0 / app / controllers / devise / sessions_controller.rb末尾定义的auth_options而调用了new


您应该重新定义在create操作中使用的auth_options。我将控制器复制到我的Rails应用程序的app / controllers / devise / sessions_controller.rb中,并替换了auth_options方法,如下所示


def auth_options

  { :scope => resource_name, :recall => "Home#new" }

end

它可以解决问题,但是url仍然是/ users / sign_in


我也会尝试解决该问题。


查看完整回答
反对 回复 2019-11-18
  • 3 回答
  • 0 关注
  • 47 浏览
我要回答

相关问题推荐

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信