Аутентификация пользователя Rails 4.0 с помощью Devise + Omniauth

Я понимаю, что у меня еще нет настроенного Facebook (это похоже на похожего, но другого зверя), но на данный момент, исходя из моего понимания, я должен иметь возможность войти в систему с моим именем пользователя Twitter, и он скажет: «Вы подписали в!" и отобразить мое имя пользователя там, где написано

<span>Logged in as <%= current_user.username %>.</span>

Кроме того, немного отдельно, я хотел бы знать, почему flash.notice не работает для меня. Это устарело в Rails 4 или мне что-то не хватает в моем файле application.html.erb, чтобы они могли показать?

Я работаю с: http://railscasts.com/episodes/235-devise-and-omniauth-revised

Вот код, с которым я сейчас работаю.

https://github.com/erosenberg/devise-app

Изменить: извините, я не очень конкретизировал, я решил, что моя стена текста получит меньше ответов, поэтому я сократил ее.

По сути, я пытаюсь работать с Railscast, чтобы Devise работал с Omniauth. Раньше я заставлял Omniauth и Devise работать самостоятельно, и собрать их вместе было совершенно новой задачей - учитывая, что в каждом уроке мне предлагалось делать это по-другому, и все они кажутся устаревшими. Я настроил его так, как рекомендует RailsCast - добавить контроллер OmniAuthCallbacks, но это, похоже, ничего не делает. Когда я пытаюсь войти в Twitter с помощью своего приложения, оно просто возвращает меня на страницу входа, однако, когда я пытаюсь войти в систему с адресом электронной почты, оно работает и переводит меня на созданную мною «панель управления». . По какой-то причине вход в Twitter не работает, и я также хотел бы иметь возможность протестировать с помощью flash [: notice], но по какой-то причине это тоже не работает. Я также хотел бы, чтобы вход в систему Facebook работал, и чтобы пользователь мог объединить свою учетную запись с Twitter или Facebook.

Если вам нужно, чтобы я объяснил еще более подробно, я тоже могу попытаться сделать это. Спасибо!


person eightonrose    schedule 20.08.2013    source источник
comment
Нам нужны подробности. Учтите, что мы не вы и не понимаем ваш проект. Опишите контекст, что вам нужно, чего вы ожидаете и что происходит.   -  person James Lim    schedule 20.08.2013
comment
Не уверен, в чем проблема, вам нужно быть более точным. В любом случае, я только что проверил ваш код и это просто неверно. Этот код должен быть включен в класс модели пользователя. Ознакомьтесь с этим руководством.   -  person Ashitaka    schedule 20.08.2013
comment
Я отредактировал описание, чтобы, надеюсь, облегчить понимание, моя беда. Сейчас я посмотрю на этот учебник.   -  person eightonrose    schedule 20.08.2013


Ответы (1)


В вашем config / initializers / devise.rb вы не меняли конфигурацию.

config.authentication_keys = [ :email ]

Это означает, что по умолчанию для аутентификации используется электронная почта. Таким образом, код, который вам не хватает, сохраняет электронную почту пользователя или не будет подтвержден.

Вы можете изменить authentication_key или сохранить электронное письмо.

ИЗМЕНИТЬ

Хорошо, после того, как я клонирую приложение и запускаю его на своей машине. Я уверен, что это потому, что проверка электронной почты не прошла. Потому что, когда вы используете генератор устройства для создания файла миграции здесь. Электронная почта Devise validate должна присутствовать по умолчанию.

t.string :email,              :null => false, :default => ""

Таким образом, вы можете выполнить откат, чтобы изменить эту миграцию на удаленную ': null => false'. После этого добавьте этот код в пользовательскую модель пользователя:

def email_required?
  false
end

И не забудьте изменить свою конфигурацию, чтобы получить правильный ключ аутентификации.

config.case_insensitive_keys = [ :username ]
config.strip_whitespace_keys = [ :username ]
person Kuo Jimmy    schedule 20.08.2013
comment
Я попытался раскомментировать это, но это не сработало. Хотя, похоже, он на правильном пути! - person eightonrose; 20.08.2013
comment
Попробуйте вместо этого config.authentication_keys = [: username]. - person Kuo Jimmy; 20.08.2013
comment
Вы перезапускали приложение после изменения настройки? - person Kuo Jimmy; 20.08.2013
comment
Да, я перезапустил приложение после внесения изменений. - person eightonrose; 20.08.2013
comment
Вау, сработало! Большое спасибо! Это должно быть обновление в Devise или что-то в этом роде, поскольку оно вообще не упоминалось в руководстве. Это единственное, что мне не нравится в большинстве руководств по Rails: иногда они говорят: «Это просто работает!» и не объясняю, как и почему это происходит, но устранение неполадок определенно заставило меня задуматься. - person eightonrose; 20.08.2013
comment
Если бы я хотел разрешить отображение имени пользователя ИЛИ электронной почты, я бы тоже мог это сделать, верно? Я, вероятно, в конечном итоге просто покажу их имя, но было бы неплохо иметь такую ​​возможность. - person eightonrose; 20.08.2013
comment
Самый простой способ сделать это - добавить пользователю логический атрибут, например show_username, и установить значение по умолчанию false или true. Таким образом, вы можете отображать имя пользователя или адрес электронной почты по этому атрибуту. - person Kuo Jimmy; 20.08.2013