我試圖創建簡單的登錄/註銷鏈接,但它似乎可以讓按鈕說登錄或說註銷......我無法讓它切換,如果用戶登錄進入或退出。登錄/註銷故障
首先這裏是從我的應用程序控制器代碼:
def current_user
begin
@current_user ||= User.find(session[:user_id]) if session[:user_id]
rescue Exception => e
nil
end
end
def user_signed_in?
return true if current_user
end
所以對於我的登入/登出我把這個:
<% if @current_user %>
<%= link_to("Logout", destroy_user_session_path, :method => :delete) %>
<% else %>
<%= link_to 'Login', new_user_session_path %>
如果我把「@ CURRENT_USER =真」,那麼它會無論用戶是否登錄,始終返回「註銷」。如果我只放置「@current_user」,那麼無論如何它總是會返回登錄。那麼我應該怎麼做,以便它實際上做我想做的事情?
UPDATE好的。這絕對是我的OmniAuth設置造成的問題。如果我用Facebook登錄,那麼登錄註銷就可以正常工作。這可能與我發佈的其他問題有關,其中活動管理員不再顯示電子郵件地址......但如果Facebook管理員登錄,它將顯示一個Facebook用戶名。這裏的培訓相關信息:
從應用程序/模型/ user.rb
def self.create_with_omniauth(auth)
create! do |user|
user.provider = auth['provider']
user.uid = auth['uid']
user.password = user.password_confirmation = SecureRandom.urlsafe_base64(n=6)
if auth['info']
user.name = auth['info']['name'] || ""
user.email = auth['info']['email'] || ""
從application_controller.rb
def authenticate_active_admin_user!
authenticate_user!
unless current_user.superadmin?
redirect_to root_url, :alert => "Access denied."
end
end
def current_user
begin
@current_user ||= User.find(session[:user_id]) if session[:user_id]
rescue Exception => e
nil
end
end
def user_signed_in?
return true if current_user
end
def correct_user?
@user = User.find(params[:id])
unless current_user == @user
redirect_to root_url, :alert => "Access denied."
end
end
def authenticate_user!
if !current_user
redirect_to root_url, :alert => 'You need to sign in for access to this page.'
end
最後這是什麼dubugger返回與Facebook登錄時(以它只是返回非Facebook的用戶「 - 」):
!ruby/object:User
attributes:
id: 5
email: [email protected]
encrypted_password: $10$rMOun/NhxPuMyVEIMeFOGSTw4IVmXGTz/qZ9tS63edevML6
reset_password_token:
reset_password_sent_at:
remember_created_at:
sign_in_count: 0
current_sign_in_at:
last_sign_in_at:
current_sign_in_ip:
last_sign_in_ip:
created_at: 2013-07-05 05:50:01.280117000 Z
updated_at: 2013-07-08 09:46:32.585278000 Z
superadmin: true
provider: facebook
uid: '6786173'
name: MoneyMark
所以希望這足夠INF o深入到底...這基本上只是說facebook用戶是「current_user」。 (但不知何故其他用戶登錄工作正常...除了我不能做他們的登錄註銷。)
其實我正在使用設計。有沒有一些簡單的方法來與設計做到這一點? –
當然,設計有助手方法'user_signed_in?'你可以使用這個。我會更新我的回答 –
當我說,它只是總是說登錄。我認爲其他用戶是正確的,並且當前用戶是......以某種方式......設置爲零。我可以發佈代碼,但我應該發佈哪個文件?有認證控制器,應用程序控制器(我相信我上面發佈的)users.rb模型(來自模型,而不是管理文件夾中的其他模型...)看到它是如何變得混亂。 :) –