0
我嘗試使用devise進行Facebook身份驗證。但如果我點擊Facebook身份驗證按鈕,我被重定向到通常的登錄表單。下面是 是user.rb的代碼。當我使用Facebook的身份驗證與設計,我無法獲得用戶的電子郵件地址
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :omniauthable
has_and_belongs_to_many :roles
mount_uploader :image, ImageUploader
def has_role?(name)
self.roles.where(name: name).length > 0
end
def self.find_for_oauth(auth)
user = User.where(uid: auth.uid, provider: auth.provider).first
unless user
user = User.create(
uid: auth.uid,
provider: auth.provider,
name: auth.info.name,
email: auth.info.email,
password: Devise.friendly_token[4, 30])
end
end
end
但是當我把虛假的電子郵件地址,我可以登錄Facebook的認證。
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :omniauthable
has_and_belongs_to_many :roles
mount_uploader :image, ImageUploader
def has_role?(name)
self.roles.where(name: name).length > 0
end
def self.find_for_oauth(auth)
user = User.where(uid: auth.uid, provider: auth.provider).first
unless user
user = User.create(
uid: auth.uid,
provider: auth.provider,
name: auth.info.name,
email: User.dummy_email(auth),
password: Devise.friendly_token[4, 30])
end
user
end
private
def self.dummy_email(auth)
"#{auth.uid}-#{auth.provider}@example.com"
end
end
什麼問題?
如果您嘗試在self.find_for_oauth中插入這行代碼,會顯示'puts auth.info.email'是什麼?你也可以嘗試User.create!()而不是User.create()?只是想,也許它失敗了一些驗證或什麼。 –