Rails中的OAuth - 谷歌,推特,脸书,连接登录,如stackoverflow登录

the*_*gah 5 ruby-on-rails

Rails有其余的autho插件,运行良好,但有一个解决方案,结合Twitter,Facebook,谷歌,雅虎等...

似乎每个都有自己的插件和要求,混合它们将是一个烂摊子.

这适用于登录用户,例如Stackoverflow如何完成工作而不是使用API​​的强大功能.

我想做的是做stackoverflow为登录做的事情,但是在rails中.

Jon*_*ian 3

编写自己的控制器代码来连接到每个服务并进行重定向并不是太困难。例如,使用 oauth 对 twitter 进行身份验证需要两个操作,总共大约 20 行代码。

将每个服务的代码单独保存在其自己的控制器中。

def twitter_oauth
  o = Twitter::OAuth.new(your_twitter_consumer_token, your_twitter_consumer_secret, :authorize_path => '/oauth/authenticate', :sign_in => true)
  o.set_callback_url(twitter_cb_url)
  session[:twitter_oauth_request_token] = o.request_token.token
  session[:twitter_oauth_request_secret] = o.request_token.secret
  redirect_to o.request_token.authorize_url
end

def twitter_oauth_cb
  o = Twitter::OAuth.new(your_twitter_consumer_token, your_twitter_consumer_secret, :authorize_path => '/oauth/authenticate', :sign_in => true)
  if params[:denied]
    redirect_to root_url
  elsif params[:oauth_verifier]
    o.authorize_from_request(session[:twitter_oauth_request_token], 
                             session[:twitter_oauth_request_secret],
                             params[:oauth_verifier])
    # look up this user in the db by o.access_token.token 
    # is the user not found? create them, save their token
    # log them in - UserSession.create(user, true)
    redirect_to root_url
  end
end
Run Code Online (Sandbox Code Playgroud)