我想在Rails 3应用程序使用Facebook的Omniauth两种色器件型号。 目前,这不是一件可以使用omniauthable和色器件助手。
类似的问题回答了如何做到这一点:
Omniauth“与” STI和设计
”从devise.rb ..move您omniauth配置omniauth.rb并创建自己的omniauth路线“。
但我有在确定这些路线和助手麻烦,即对于Facebook我曾经有一项帮助是这样的:
user_omniauth_authorize_path(:facebook)
..这重定向到Facebook和再放入我在devise_for范围内建立一个回调URL。
将我的路线/助手模样的omniauth Facebook的策略是什么,如果手动设置?
我已经有omniauth,Facebook和设计很好地为前“用户”模式工作,所以我有不同
@user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user, params[:state])
..parts准备好了,但现在有两个型号。 我只是具有更换色器件的助手我觉得麻烦。
你的链接应该像这样的:
<%= link_to "Sign in with Facebook", "/auth/facebook" %>
您还可以创建一些回调路线,有2种方法可以做到这一点。 您可以:
定义捕获所有回调和重定向到一个控制器的行动路线:
get "/auth/:provider/callback" => "authentications#create"
然后,您可以使用params[:provider]
获得供应商的名称。 使用的if
你能那么做不同的事情取决于供应商。
或定义为每一个供应商,你可以指出您的控制器不同的行动路线:
get "/auth/twitter/callback" => "authentications#twitter" get "/auth/facebook/callback" => "authentications#facebook"
这些路由也可以在一个单一的路线凝结:
get "/auth/:action/callback", :to => "authentications", :constraints => { :action => /twitter|facebook/ }
然后,您需要定义这些操作。 在Twitter的动作,你可以获取用户的微博和Facebook的行动,你可以获取用户的帖子,例如。
另外,不要忘记创建failure
的行动来处理其中一个用户不授权具有一定的供应商登录的情况。
现在,你会碰到一个问题。 你如何找出链接应指向? 对于Twitter和Facebook,似乎很明显( /auth/twitter
和/auth/facebook
,分别)。
但是,如果你用的是什么omniauth-google-oauth2
宝石使用Google+登入? 你唯一的希望是每个omniauth宝石( 这里列出 )有一些很好的文档。
在任何情况下,如果你不知道你应该使用,或者如果你根本不喜欢按一定的宝石使用的URL网址,你可以随时改变它!
例如,URL /auth/google_oauth2
肯定是不漂亮,至少比Facebook的和Twitter的网址。 要更改网址,使用name
选项。
# omniauth.rb, when using pure omniauth
provider :google_oauth2, ENV['GOOGLE_KEY'], ENV['GOOGLE_SECRET'],
{
name: 'google'
}
# devise.rb, when using omniauth+devise
config.omniauth :google_oauth2, ENV['GOOGLE_KEY'], ENV['GOOGLE_SECRET'],
{
name: 'google',
}
现在你可以使用url /auth/google
,好多了。
注:我做了一个几参考AuthenticationsController
但也许你拥有的是一个CallbacksController
或OmniauthCallbacksController
,它其实并不重要,你们怎么称呼它。