Devise,基于Warden的Ruby身份验证gem (另一个身份验证gem)不支持Twitter Oauth作为身份验证策略,但Warden支持。有一种方法可以在Devise中使用Warden Twitter Oauth策略,但我想不出来。我在devise配置文件中使用了以下代码块:
config.warden do |manager|
manager.oauth(:twitter) do |twitter|
twitter.consumer_secret = <SECRET>
twitter.consumer_key = <KEY>
twitter.options :site => 'http://twitter.com'
end
manager.default_strategies.unshift :twitter_oauth
end但是我一直收到各种各样的错误信息。有没有人知道怎么做?我假设这里还有更多的事情要做(配置一个新的链接/路由来与Warden对话,也许可以向Devise用户模型添加属性,等等),但是我不知道它们是什么。请帮帮忙。
发布于 2010-08-08 04:11:51
# Needed gems. Add to your Gemfile if you are using Rails3.
gem 'devise'
gem 'warden_oauth'
#models/user.rb
devise :token_authenticatable, :oauthable # <-- Must have these
#/config/initializers/devise.rb
require 'warden_oauth'
config.warden do |manager|
manager.oauth(:twitter) do |twitter|
twitter.consumer_secret = '<SECRET>'
twitter.consumer_key = '<CONSUMER KEY>'
twitter.options :site => 'http://twitter.com'
end
manager.default_strategies(:scope => :user).unshift :twitter_oauth
end
Warden::OAuth.access_token_user_finder(:twitter) do |access_token|
User.find_or_create_by(:token => access_token.token, :secret => access_token.secret).tap do |user|
#...
end
end
# Link to "Login With Twitter" somewhere in your view
<%= link_to( "Login With Twitter", user_session_path(:warden_oauth_provider => 'twitter') ) %>发布于 2010-12-02 04:09:24
Omniauth让这一切变得很容易。有一个关于在Devise (part 1,part 2)中使用Omniauth的铁路广播。
发布于 2010-10-02 00:28:16
这个解决方案确实有效。您只需确保在指定:warden_oauth_provider => 'twitter‘时调用的是受保护的操作,否则Rails将直接忽略它。
要使用上面的示例,请将链接更改为:
<%= link_to( "Login With Twitter", user_session_path(:warden_oauth_provider => 'twitter'), :method => :post ) %>https://stackoverflow.com/questions/2868609
复制相似问题