Я следовал Railscasts (версии ASCII) # 235 и и часть # 236, чтобы настроить создание аутентификаций пользователей с использованием OmniAuth & Devise: OmniAuth Часть 1 OmniAuth Часть 2
Я нахожусь на этапе, когда я только что изменил create
метод authentications controller
, чтобы пользователь, не вошедший на сайт, мог войти напрямую через твиттер. Код для метода create
выглядит следующим образом:
def create
omniauth = request.env["omniauth.auth"]
authentication = Authentication.find_by_provider_and_uid(omniauth['provider'], omniauth['uid'])
if authentication
flash[:notice] = "Signed in successfully."
logger.info("AUTHENTICATION: #{authentication.inspect}")
#logger.info("AUTHENTICATION METHODS: #{authentication.methods.sort}")
logger.info("authentication.user: #{authentication.user}")
#logger.info("authentication.user.nil?: #{authentication.user.nil?}")
#logger.info("authentication.user.id: #{authentication.user.id}")
sign_in_and_redirect(:user, authentication.user)
else
current_user.authentications.create(:provider => omniauth['provider'], :uid => omniauth['uid'])
flash[:notice] = "Authentication successful."
redirect_to authentications_url
end
end
Теперь, когда я перехожу к /auth/twitter
, я получаю эту ошибку:
No route matches "/auth/failure"
Это потому, что authentication.user
это nil
. Код для метода create
точно такой же, как в Railscast, и я не понимаю, почему authentication.user
равен нулю.
Это вывод authentication.inspect
:
#<Authentication id: 1, user_id: 1, provider: "twitter", uid: "319521616", created_at: "2011-08-01 10:32:48", updated_at: "2011-08-01 10:32:48">
Кто-нибудь знает, почему authentication.user
будет nil
, даже если метод inspect
возвращает действительные данные.
Вот код от моей модели пользователя:
class User < ActiveRecord::Base
has_many :authentications
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:lockable, :confirmable #Added lockable and confirmable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me
end