[英]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.