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 關注
- 695 瀏覽
添加回答
舉報