シンプルなログイン/ログアウトリンクを作成しようとしていますが、ボタンにログインまたはログアウトをさせることができるようです...ユーザーがログインしているかログアウトしているかを切り替えることができません。
まず、アプリケーション コントローラーのコードを次に示します。
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」を入力すると、ユーザーがログインしているかどうかに関係なく、常に「ログアウト」が返されます。「@current_user」だけを入力すると、関係なく常にログインが返されます。では、私がやろうとしていることを実際に実行するには、何を入れればよいのでしょうか?
更新OK。問題を引き起こしているのは間違いなく私の 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」であると言っているだけです。(それでも、どういうわけか、他のユーザーのログインは問題なく機能しています...ただし、それらのユーザーのログインログアウトを行うことはできません。)