我正在尝试创建简单的登录/注销链接,但似乎我可以让按钮说登录或说注销......如果用户登录或注销,我无法让它切换。
首先是我的应用程序控制器的代码:
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=true”,那么无论用户是否登录,它都会返回“logout”。如果我只输入“@current_user”,那么无论如何它都会返回登录名。那么我应该放什么让它真正做我想做的事情呢?
更新好的。绝对是我的 OmniAuth 设置导致了问题。如果我使用 facebook 登录,那么登录注销就可以了。这可能与我发布的另一个问题有关,其中活动管理员不再显示电子邮件地址......但如果 Facebook 管理员登录,它将显示一个 facebook 用户名。以下是相关信息:
来自 app/models/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
最后,这是使用 facebook 登录时调试器返回的内容(对于非 facebook 用户,它只返回“--”):
!ruby/object:User
attributes:
id: 5
email: courtneyloveless@notevenreal.com
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
所以希望这是足够的信息来深入了解这个......它基本上只是说facebook用户是“current_user”。(但不知何故,其他用户登录工作得很好......除了我不能为他们做登录注销。)