Ошибка OmniAuth RailsCast (выпуск 235) в программе «Напомни мне» (выпуск 274) - PullRequest
0 голосов
/ 30 марта 2012

Я следовал учебнику Райана Бейтса / RailsCasts для входа в систему с помощью файлов cookie и напоминал мне о функциональности приложения, которое я создаю.

[ссылка: http://railscasts.com/episodes/274-remember-me-reset-password?view=comments] Я хотел представить его функциональность OmniAuth для того же приложения.

[ссылка: http://railscasts.com/episodes/235-omniauth-part-1] Я не использую устройство. Я правильно загружаю страницу приложения Twitter, ошибка возникает при перенаправлении обратно в мое приложение. У меня правильно установлен URL-адрес для обратного вызова в Twitter.

Я получаю undefined method "authentications" for nil:NilClass ошибку с OmniAuth и моим authentications_controller. В частности, моя консоль гласит:

NoMethodError (undefined method authentications for nil:NilClass):app/controllers/authentications_controller.rb:9:in create'.

Вот код контроллера аутентификации:

class AuthenticationsController < ApplicationController

  def index
    authentications = Authentication.all
  end

  def create
    auth = request.env["omniauth.auth"]
    current_user.authentications.create(:provider => auth['provider'], :uid => auth['uid'])
    flash[:notice] = "Authentication was successful."
    redirect_to authentications_url
  end

Вот вспомогательный метод current_user в моем контроллере приложений.

private
  def current_user
    @current_user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]
  end
  helper_method :current_user

У пользователя много аутентификаций. Аутентификации принадлежат пользователю.

Я бы хотел, чтобы OmniAuth работал с Twitter, чтобы пользователи могли войти в систему со своей учетной записью Twitter, чтобы избежать ошибки, получаемой при сохранении кода current_user

Помощь приветствуется.

1 Ответ

0 голосов
/ 30 марта 2012

Вы не учитываете случай, когда пользователь не вошел в систему. В своем действии create вы связываете учетную запись пользователя на своем сайте с его учетной записью в Twitter.

Вы не можете использовать current_user, не убедившись, что пользователь вошел в систему. В противном случае он вернет nil, и поэтому он говорит undefined method authentications for nil:NilClass.

Взгляните на следующую рассылку, в которой более подробно: http://railscasts.com/episodes/236-omniauth-part-2

...