Tôi đang sử dụng omniauth để cho phép mọi người đăng ký/đăng nhập bằng Facebook và hoạt động tốt của nó! Nhưng tôi muốn thêm đá quý omniauth-twitter để cho phép họ kết nối với Twitter.Rails: Cookie tràn với omniauth twitter đăng ký
Tôi làm theo các bước tương tự so với khi tôi thiết lập Facebook kết nối: https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview
Nhưng khi tôi đăng ký/trong tôi nhận được lỗi sau:
ActionDispatch::Cookies::CookieOverflow in OmniauthCallbacksController#twitter
tại URL sau:
http://localhost:3000/users/auth/twitter/callback?oauth_token=HRjON8J4bj9EcbjiELHcpHmSXo0cPd0wCHyuWG8ATZU&oauth_verifier=ZiZb1FAKZmNML1gVu5RKBLEGzbeAPPzC80QCpPDGU
tôi đã cố gắng điều khác nhau đề nghị trên bài viết tương tự nhưng không ai trong số những hoạt động :(
Dưới đây là cấu hình của tôi:
omniauth_callbacks_controller.rb => app/controllers/omniauth_callbacks_controller.rb
def twitter
# You need to implement the method below in your model (e.g. app/models/user.rb)
@user = User.find_for_twitter_oauth(request.env["omniauth.auth"])
if @user.persisted?
sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated
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
end
user.rb => app/models/user.rb
def self.find_for_twitter_oauth(auth)
where(auth.slice(:provider, :uid)).first_or_create do |user|
user.provider = auth.provider
user.uid = auth.uid
user.email = auth.info.email
user.password = Devise.friendly_token[0,20]
user.name = auth.info.name # assuming the user model has a name
end
end
def self.new_with_session(params, session)
super.tap do |user|
if data = session["devise.twitter_data"] && session["devise.twitter_data"]["extra"]["raw_info"]
user.email = data["email"] if user.email.blank?
end
end
end
devise.rb => app/config/initializers/devise.rb
Rails.application.config.middleware.use OmniAuth::Builder do
provider :twitter, "KEY, "KEYPASSWORD
end
Bất kỳ ý tưởng gì sai?
Bạn đặt 'request.env [" omniauth.auth "]' là một băm lớn vào phiên. Bạn cần thêm câu trả lời nào? –
Mẹo chuyên nghiệp: chỉ cắt những phần bạn CẦN và đặt những phần đó trong phiên. –
Kiến thức về mã của tôi rất hạn chế, khi tôi bắt đầu học mã từ đầu tháng trước, vì vậy tôi không thực sự bây giờ ý nghĩa của hàm băm này. Tôi chỉ cần đặt nó bởi vì tôi đã có nó với mô hình omniauth của tôi cho facebook authentification và nó đã làm việc - Bạn có ý nghĩa gì bởi nó là một băm lớn? là nó không cần thiết? – zacchj