这是我的控制器
def social_login
user = User.from_omniauth(env["omniauth.auth"])
session_params = user.attributes.merge("email" => user.email, "password" => user.crypted_password)
@user_session ||= UserSession.new(session_params, true)
if @user_session.save
user = User.where(email: @user_session.email).first
redirect_to root_path, :notice => "Signed in succesfully from #{env["omniauth.auth"].provider.titleize}. Greetings #{user.name.titleize} ;)"
else
flash.now[:alert] = "Sign in failed."
render "new"
end
end
这是处理omniauth进程的模型
def self.from_omniauth(auth)
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
user.provider = auth.provider
user.uid = auth.uid
user.name = auth.info.name
user.email = auth.info.email
user.password = auth.credentials.token
user.password_confirmation = auth.credentials.token
user.oauth_token = auth.credentials.token
user.oauth_expires_at = Time.at(auth.credentials.expires_at)
user.save!
end
end
我在尝试保存会话时总是遇到错误。它说:
Authlogic::Session::Existence::SessionInvalidError: Your session is invalid and has the following errors: Email is not valid
你能帮助我吗?感谢
答案 0 :(得分:0)
您是否在facebook app config / rails的初始化中启用了电子邮件权限?
像这样:
config.omniauth :facebook, "APP_ID", "APP_SECRET", {:scope => 'email,...'}