我開始看Ryan Bates的tutorial關於如何在設計中使用Omniauth(rails-cast 235修訂版)。我遇到了user.rb文件的問題。他顯示了他tutorial使用設計和導軌的omniauth嘰嘰喳喳寶石5
devise :omniauthable, # ...
def self.from_omniauth(auth)
where(auth.slice(:provider, :uid)).first_or_create do |user|
user.provider = auth.provider
user.uid = auth.uid
user.username = auth.info.nickname
end
end
def self.new_with_session(params, session)
if session["devise.user_attributes"]
new(session["devise.user_attributes"], without_protection: true) do |user|
user.attributes = params
user.valid?
end
else
super
end
end
def password_required?
super && provider.blank?
end
def update_with_password(params, *options)
if encrypted_password.blank?
update_attributes(params, *options)
else
super
end
end
不工作對我來說,它的顯示加載ActiveModel :: ForbiddenAttributesError與這行代碼where(auth.slice(:provider, :uid)).first_or_create do |user|
突出。我想他的版本不工作,因爲我使用Rails 5.反正我已經嘗試修改user.rb文件。用下面的代碼。
def self.from_omniauth(auth)
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
\t user.email = auth.info.email
user.password = Devise.friendly_token[0,20]
user.provider = auth.provider
user.uid = auth.uid
token = auth.credentials.token,
secret = auth.credentials.secret
end
end
def self.new_with_session(params, session)
super.tap do |user|
if data = session["devise.twitter_data"]
# user.attributes = params
user.update(
email: params[:email],
password: Devise.friendly_token[0,20],
provider: data["provider"],
uid: data["token"],
token: data["credentials"]["token"],
secret: data["credentials"]["secret"]
)
end
end
end
def password_required?
super && provider.blank?
end
def update_with_password(params, *options)
if encrypted_password.blank?
update_attributes(params, *options)
else
super
end
end
end
我能夠獲得Twitter的身份驗證頁面顯示了負載了大約一分鐘,然後重定向回我的用戶註冊頁面,而不登錄,也沒有顯示任何錯誤消息。順便說一下,有人知道如何使用設計與Facebook登錄。