3 回答
TA贡献1865条经验 获得超7个赞
使用以下命令在您的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)
不要忘记重启服务器。
我认为没有比这更简单的方法了。祝好运。
TA贡献1777条经验 获得超10个赞
如果使用您自己的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并修改配置。
TA贡献1825条经验 获得超4个赞
这是设计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
我也会尝试解决该问题。
- 3 回答
- 0 关注
- 651 浏览
添加回答
举报