Gau*_*ier 4 ruby-on-rails omniauth ruby-on-rails-3
当我尝试在我的网站上使用twitter登录时,我发现了一些错误.
ActionDispatch::Cookies::CookieOverflow in Users::OmniauthCallbacksController#twitter
ActionDispatch::Cookies::CookieOverflow
Run Code Online (Sandbox Code Playgroud)
我找不到解决方案,这是我使用的代码.
omniauth_callbacks_controller.rb
def twitter
@user = User.find_for_provider_oauth(request.env["omniauth.auth"], current_user)
if @user.persisted?
sign_in_and_redirect @user, :event => :authentication
set_flash_message(:notice, :success, :kind => "twitter") if is_navigational_format?
else
session["devise.twitter_data"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
Run Code Online (Sandbox Code Playgroud)
devise.rb
require "omniauth-twitter"
config.omniauth :twitter, 'xxxxxxx', 'xxxxxxxxxxxk', :strategy_class => OmniAuth::Strategies::Twitter
Run Code Online (Sandbox Code Playgroud)
user.rb
def self.from_omniauth(auth)
where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
user.provider = auth.provider
user.uid = auth.uid
user.name = auth.info.name
user.oauth_token = auth.credentials.token
user.oauth_expires_at = Time.at(auth.credentials.expires_at)
user.save!
end
def self.find_for_provider_oauth(auth, signed_in_resource=nil)
user = User.where(:provider => auth.provider, :uid => auth.uid).first
unless user
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],
invite_code:"42TXP"
)
end
user
Run Code Online (Sandbox Code Playgroud)
小智 8
使用: .except("extra")
session["devise.twitter_data"] = request.env["omniauth.auth"].except("extra")
Run Code Online (Sandbox Code Playgroud)
它从中删除了很大一部分cookie,根本不需要.
小智 5
这是你在save的else部分中放入会话的内容
session["devise.twitter_data"] = request.env["omniauth.auth"]
Run Code Online (Sandbox Code Playgroud)
它对于一个cookie来说可能太大了.您应该将该信息保存在其他地方.或者不要保留它.
| 归档时间: |
|
| 查看次数: |
3266 次 |
| 最近记录: |