/ / Omniauth не оновлює секрет маркера OAuth для входу - ruby-on-rails-3, twitter, omniauth

Omniauth не оновлює ввімкнений секретний маркер OAuth - ruby-on-rail-3, twitter, omniauth

Я використовую Omniauth для аутентифікації користувачів за допомогою Twitter і Facebook, переходячи до "стандартного" підручника з цієї теми (Райан Бейтс ", хоча я використовую Authlogic, а не розробляти).

Я можу ввійти за допомогою Twitter, але не можу впоратисяаутентифіковані запити назад, оскільки мій секрет маркера доступу до Twitter змінено на кінці Twitter, але він не оновлюється після закінчення моєї програми. Я спробував видалити автентифікацію, але це просто зберігає стару чомусь.

authentications_controller.rb

def create
omniauth = request.env["omniauth.auth"]
authentication = Authentication.find_by_provider_and_uid(omniauth["provider"], omniauth["uid"])

if authentication
# User is already registered with application
flash[:notice] = "Signed in successfully."
sign_in_and_redirect(authentication.user)
elsif current_user
# User is signed in but has not already authenticated with this social network
current_user.authentications.create!(:provider => omniauth["provider"], :uid => omniauth["uid"], :token => (omniauth["credentials"]["token"] rescue nil), :secret => (omniauth["credentials"]["secret"] rescue nil))
current_user.apply_omniauth(omniauth)
current_user.save

flash[:notice] = "Authentication successful."
redirect_to root_url
else
# User is new to this application
@user = User.new
@user.apply_omniauth(omniauth)

if @user.save
flash[:notice] = "User created and signed in successfully."
sign_in_and_redirect(@user)
else
session[:omniauth] = omniauth.except("extra")
redirect_to new_user_path
end
end
end

user.rb

def apply_omniauth(omniauth)
self.email = "foo@example.com"
self.login = omniauth["user_info"]["nickname"] if login.blank?
authentications.build(:provider => omniauth["provider"], :uid => omniauth["uid"], :token => omniauth["credentials"]["token"], :secret => omniauth["credentials"]["secret"])
end

Будь-які ідеї? Рейки 3.0.6 і Ruby 1.8.7

Відповіді:

2 для відповіді № 1

Стів, ви можете спробувати наступне:

if authentication
# Make sure we have the latest authentication token for user
if omniauth["credentials"]["token"] && omniauth["credentials"]["token"] != authentication.token
# puts "Found Invalid token"
authentication.update_attribute(:token, omniauth["credentials"]["token"])
end
flash[:notice] = "Signed in successfully"
sign_in_and_redirect(:user, authentication.user)
elsif ...

Це в основному повинно оновлювати маркер доступу користувача кожного разу, коли вже зареєстрований користувач намагається увійти, і коли виникає невідповідність маркера.