我已使用设备和omniauth在我的应用上创建了注册/加入功能。用户可以通过注册表单注册然后登录。他们也可以通过Facebook登录。
但是,当我使用自己的电子邮件注册时,请登录john@whosjohn.com,然后使用我的Facebook帐户登录,该帐户也使用john@whosjohn.com我已经创建了2个不同的用户。
我已经与User.all核对了一下发生了什么以及当我通过Facebook登录时我没有保存电子邮件地址。价值是nill。
有人可以解释如何将用户电子邮件地址与他的Facebook帐户关联到我的用户表中吗?
user.rb
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable,:omniauthable, :omniauth_providers => [:facebook]
def password_required?
false
end
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
end
end
end
答案 0 :(得分:1)
试试这个:
创建授权模型
rails g model Authorization
在迁移中添加以下代码
class CreateAuthorizations < ActiveRecord::Migration
def change
create_table :authorizations do |t|
t.string :provider
t.string :uid
t.integer :user_id
t.string :token
t.string :secret
t.timestamps
end
end
end
,然后强>
rake db:migrate
在您的models / authorization.rb
中belongs_to :user
在您的models / user.rb
中has_many :authorizations
def self.from_omniauth(auth)
authorization = Authorization.where(:provider => auth.provider, :uid => auth.uid.to_s).first_or_initialize
authorization.token = auth.credentials.token
if authorization.user.blank?
user = User.where('email = ?', auth["info"]["email"]).first
if user.blank?
user = User.new
user.password = Devise.friendly_token[0,10]
user.email = auth.info.email
user.save
end
authorization.user_id = user.id
end
authorization.save
authorization.user
end
希望这会对你有所帮助。