我希望用户能够通过其他服务(链接、facebook、google 和 twitter)进行连接,而无需填写另一个密码。
我一直在关注 railscast.com 令人惊叹的 235 和 236 集,它们很好地解释了如何将 OmniAuth 与 Devise gem 一起使用。
我没有使用让我感到困惑的设计,而且我无法让它像在视频广播中那样工作。
我尝试按照 Ryan Bates 的指示并适应我的情况。我无法按照他在 no236 视频第 10 分钟的指示进行操作,他在其中覆盖了 Devise 的注册控制器和视图。
所以当没有用户登录并且没有可用的omniauth身份验证时,我的问题就会发生。在这种情况下,我需要创建一个新用户、保存、登录并最终重定向。
如果验证后保存失败,我需要重定向到带有验证错误的用户新表单。
我确实设法重定向到新的用户表单,但我没有设法得到验证错误。
CODE 认证控制器
def create
omniauth = request.env["omniauth.auth"]
#current_user = find_current_user
authentication = Authentication.find_by_provider_and_uid(omniauth['provider'], omniauth['uid'])
if authentication
flash[:notice] = "Signed in successfully."
login_and_redirect(authentication.user)
elsif @current_user
@current_user.authentications.create!(:provider => omniauth['provider'], :uid => omniauth['uid'])
flash[:notice] = "Authentication successful."
redirect_to authentications_url
else
user = User.new
puts "OmniAuth: " + omniauth[:info].to_s
user.apply_omniauth(omniauth)
if user.save
flash[:notice] = "Signed in successfully."
login_and_redirect(user)
else
flash[:notice] = "Omniauth Extra."
session[:omniauth] = omniauth.except('extra')
user.valid?
#redirect_to :controller => :users, :action => :new, :plan => 2
redirect_to new_user_url
end
end
end
问题
问题 1:如何使用omniauth 用户信息和错误消息通过预先填写的表单重定向到新用户?
问题 2:在使用其他服务进行身份验证时,如何在我的非设计模型中跳过验证?
用户型号
class User < ActiveRecord::Base
has_many :authentications
belongs_to :type, :class_name => "UserType", :foreign_key => "type_id"
has_many :logins, :class_name => "UserLogin"
validates :email_address, :email => { :message => 'format is incorrect!' }
validates_presence_of :email_address, :pseudo, :type_id
validates_uniqueness_of :email_address, :message => "has already been taken"
validates_uniqueness_of :pseudo, :message => "has already been taken"
attr_accessor :password_confirmation
validates_confirmation_of :password
validate :password_non_blank, :message => "Cannot use blank password!"
validates :agreed_terms_of_services, :presence => true, :allow_nil => false
attr_protected :password_hash, :password_salt, :active, :activation_token, :activated_at
...
...
end