我和Devise有点问题。当我尝试使用某个帐户登录时,当我使用其他帐户登录时,Devise会持续保存我登录的第一个帐户的会话。
当我首先通过omniauth登录,然后尝试使用Devise手动登录时,会发生这种情况。
这是我的omniauth_controller
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
respond_to :json
def facebook
@user = User.from_omniauth(request.env["omniauth.auth"]) if request.env["omniauth.auth"].present?
if @user && @user.persisted?
sign_in @user
cookies[:uId] = @user.id
else
session["devise.facebook_data"] = request.env["omniauth.auth"]
end
redirect_to root_url
end
end
我的user.rb
文件:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:omniauthable, :omniauth_providers => [:facebook]
def self.from_omniauth(auth)
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
user.email = auth.info.email
user.password = Devise.friendly_token[0,20]
user.name = auth.info.name # assuming the user model has a name
user.image = auth.info.image # assuming the user model has an image
end
end
def self.new_with_session(params, session)
super.tap do |user|
if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"]
user.email = data["email"] if user.email.blank?
end
end
end
end
答案 0 :(得分:0)
这是因为设计方式是在会话中存储数据。当您手动登录时,它存储user_id,而当您使用omniauth时,它会在会话中存储其他数据以了解如何进行身份验证。
当用户访问登录/退出页面时,您可以手动清除它:
rake db:sessions:clear
当然,建议GET请求永远不要操纵你可能不希望在新操作上执行此操作的状态,而只应该执行destroy操作。
如果只是为了测试开发时间,可以运行find_all()
。