0

我确实看过 Ryan Bates 的剧集,以便将设计与omniauth一起使用。问题是我可以用linkdin注册。我的代码

在我的 user.rb

field :provider,   :type => String
     field :uid,   :type => String
      field :name,   :type => String

 #has_many :authentications
   def self.from_omniauth(auth)
    where(auth.slice("provider", "uid")).first || create_from_omniauth(auth)
  end

  def self.create_from_omniauth(auth)
    create! do |user|
      user.provider = auth["provider"]
      user.uid = auth["uid"]
      user.name = auth["info"]["nickname"]
    end
  end

我添加了这个并在我的创建控制器中进行了身份验证

 user = User.from_omniauth(env["omniauth.auth"])
    session[:user_id] = user.id
    redirect_to root_url, notice: "Signed in!"

我成功地将 linkdin 的值放入我的用户数据库中

 { "_id" : ObjectId("50b2f4e66d7ab88ac7000003"), "email" : "", "encrypted_password" : "", "sign_in_count" : 0, "provider" : "linkedin", "uid" : "wuBFLcbDyB", "name" : null, "updated_at" : ISODate("2012-11-26T04:49:42.549Z"), "created_at" : ISODate("2012-11-26T04:49:42.549Z") }

但是当我从 linkdin 登录时,它不会通过 linkdin 注册,否则它会重定向到

http://localhost:3000/users/sign_in

我如何通过该链接登录?

4

1 回答 1

1

如果你的用户模型中有这样的东西

validates :username, presence: true

那么您必须知道,linked in 不会为您提供任何用户名。从那以后,要完成您的身份验证/注册,您的用户必须明确添加他的用户名。

确保您的 registrations_controoller.rb 看起来像这样

class RegistrationsController < Devise::RegistrationsController
  def create
    super
  end

private

  def build_resource(*args)
    super
    if session[:omniauth]
      @user.apply_omniauth(session[:omniauth])
      @user.valid?
    end
  end
end
于 2012-11-27T02:40:11.650 回答