gpt4 book ai didi

ruby-on-rails - 如何允许用户同时使用注册帐户和 Facebook 帐户登录?

转载 作者:行者123 更新时间:2023-12-04 03:37:25 24 4
gpt4 key购买 nike

我使用设计来允许用户在网站内注册和登录。我还使用 omniauth-facebook 允许用户使用他们的 facebook 帐户登录。但是,首先使用与 facebook 电子邮件相同的电子邮件注册的人无法使用他们的 facebook 帐户登录。我想同时使用 facebook 登录和网站注册。

这是我的用户.rb

class User < ActiveRecord::Base

devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :omniauthable

def self.find_for_facebook_oauth(auth, signed_in_resource=nil)
user = User.where(:provider => auth.provider, :uid => auth.uid).first
unless user
user = User.create(name:auth.extra.raw_info.name,
provider:auth.provider,
uid:auth.uid,
email:auth.info.email,
password:Devise.friendly_token[0,20]
)
end
user
end
end

和 omniauth_callbacks_controller.rb
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
@user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user)

if @user.persisted?
sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated
set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format?
else
session["devise.facebook_data"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
end

最佳答案

您可以通过以下方式轻松执行此操作:

  • 使用以下属性创建另一个名为 Authorization 的模型:
    provider:string, uid:string, user_id:integer
  • 现在 User 将与 Authorization 相关联,如下所示:
    class User
    has_many :authorizations
    ...
    end
  • 每当发生 facebook 登录时,请检查授权模型以查看是否存在记录。如果没有创建它并将其链接到用户模型(通过电子邮件 ID 搜索)。
  • 获取正确的用户对象并使用它登录。

  • 来源: http://net.tutsplus.com/tutorials/ruby/how-to-use-omniauth-to-authenticate-your-users/

    关于ruby-on-rails - 如何允许用户同时使用注册帐户和 Facebook 帐户登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21037877/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com