[英]In Rails using devise: How can I find out if a user has logged out from a different browser?
[英]Rails/Devise: How can I find out in the controller if the user-login was successful or not?
在視圖中,#create 和 #update 操作有這樣的習語
<% if @article.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(article.errors.count, "error") %> prohibited
this article from being saved:
</h2>
<ul>
<% @article.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
現在,是否有類似的方法可以檢查Users::SessionsController < Devise::SessionsController
,用戶登錄是否成功?
這里有一個類似的線程Ruby on Rails Devise 代碼登錄后但Peter P. Jan 18 '15 at 3:06
的回答表明,正是當登錄不成功時,然后 before_action“將不會運行”,即不好,因為我需要這個信息,登錄是否不成功。
附帶的代碼是
# app/controllers/custom_sessions_controller.rb
class CustomSessionsController < Devise::SessionsController
## for rails 5+, use before_action, after_action
before_filter :before_login, :only => :create
after_filter :after_login, :only => :create
def before_login
end
def after_login
end
end
但顯然對我的問題沒用......(?)
建議是使用用戶Mike Lapinskas, Oct 8 '16 at 5:33
這樣的 Warden 鈎子,但內容似乎也不能解決我的問題。 是登錄后的問題,不是測試登錄是否失敗
class User < ApplicationRecord
Warden::Manager.after_set_user do |user, auth, opts|
if (opts[:scope] == :user && opts[:event] == :set_user)
# < Do your after login work here >
end
end
end
此線程Devise 中的方法:注冊失敗時重定向? 似乎很有希望
The hint to Devise::FailureApp
led me to https://gist.github.com/emilsoman/5604254 , also see Custom Devise 401 unauthorized response
那里提到的響應都是 json。 這是強制性的嗎? 我不能只在html.erb
-template/partial 上調用 render 嗎?
謝謝
如果要執行登錄后方法,只需創建自定義 controller,繼承Devise::SessionsController
並將塊傳遞給super
。 Devise 將在成功登錄后調用該塊。
class CustomSessionsController < Devise::SessionsController
def create
super do |resource|
# do something after signing in successfully
end
end
end
要處理失敗的情況,您可以捕獲由warden 的
( ←我錯了)#authenticated!
如果你的邏輯很復雜,你需要自定義很多代碼,只需編寫你自己的#create,不用super,並使用#create
提供的方法來實現你的要求。 請記住 devise 有一些回調可能會影響您的自定義代碼。
class CustomSessionsController < Devise::SessionsController
def create
self.resource = warden.authenticate(auth_options) # Without `!`
if resource
# success
else
# failure
end
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.