繁体   English   中英

将OmniAuth Facebook添加到Devise

[英]OmniAuth Facebook added to Devise

我正在使用Rails 4.1,并且已经配置好devise,但现在想通过Facebook和Twitter添加注册。 Devise已完全设置,正在为用户通过电子邮件进行注册提供帮助。

我已经将“ omniauth-facebook” gem添加到我的gemlist中。

我已经设置了我的api密钥和api机密

#config/initializers/devise.rb
config.omniauth :facebook, "API KEY", "API SECRET"

我的路线文件

#routes.rb
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks", :registrations => "registrations" }

我的omniauth_callbacks_controller.rb

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

和我的用户模型

def self.find_for_facebook_oauth(auth, signed_in_resource=nil)
  user = User.where(:provider => auth.provider, :uid => auth.uid).first
  if user
    return user
  else
    registered_user = User.where(:email => auth.info.email).first
    if registered_user
      return registered_user
    else
      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    
  end
end

我也将链接添加到注册页面,但是当我单击按钮时,出现以下错误

{错误:{消息:“无效的redirect_uri:应用程序配置不允许给定URL。”,键入:“ OAuthException”,代码:191}}

好像Facebook反对在有人通过Facebook登录后您告诉它重定向到的URL。 通过Facebook开发者帐户,在“管理应用程序”->“应用程序”中检查您在Facebook应用程序设置中指定的内容。 在Facebook登录后,检查“设置”->“基本”选项卡上的应用域之一是否与您要重定向到的域匹配。 还要检查您是否重定向到在“设置”->“高级”标签上的“有效OAuth重定向URI”(如果有)中指定的URL。

我的相关配置(更改了真实域名)如下:

在设置->基本上:

应用程序域: mydomain.com

网址为: http://www.mydomain.com/http://www.mydomain.com/网络平台

在设置->高级上:

客户端OAuth登录:是

服务器API的App Secret Proof调用:是(可选,但是我喜欢安全性,并且我认为这不会加剧您的问题-相反,如果您将其设为“否”,那么我认为这并不重要如果出于这个问题的目的而将其保留下来)

有效的OAuth重定向URL: https://www.mydomain.com/users/auth/facebook/callback https://staging.mydomain.com/users/auth/facebook/callback http://dev.mydomain.com:3000/users/auth/facebook/callback : https://www.mydomain.com/users/auth/facebook/callback https://staging.mydomain.com/users/auth/facebook/callback http://dev.mydomain.com:3000/users/auth/facebook/callback

因此,您可以看到我允许重定向到生产,暂存和开发环境。 您的路径可能会有所不同,具体取决于您如何设置路线。

然后,将dev域的别名添加到我的/ etc / hosts文件中:

127.0.0.1 localhost dev.mydomain.com

因此,当Facebook告诉我的浏览器重定向到dev.mydomain.com ,它将转到我计算机上的rails应用程序。

如果您指定了重定向网址,则应在用户单击按钮时将其发送给Facebook时,再次检查是否确实向Facebook提供了其中的一个(我发现devise / omniauth需要一些笨拙的操作才能获取路径如我所愿)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM