Ruby on Rails
Аутентификация пользователей в Rails
Поиск…
Вступление
Devise - очень мощный камень, он позволяет вам регистрироваться, входить и выходить из системы сразу после установки. Кроме того, пользователь может добавлять аутентификации и ограничения для своих приложений. У разработчика также есть свои собственные взгляды, если пользователь хочет использовать. Пользователь также может настраивать регистрацию и подписывать формы в соответствии с ее потребностями и требованиями. Следует отметить, что Devise рекомендует вам реализовать свой собственный логин, если вы новичок в рельсах.
замечания
Во время генерации конфигураций конфигурации с использованием rails generate devise:install
, devise будет перечислять кучу инструкций на терминале для последующего.
Если у вас уже есть модель USER
, запуск этой команды rails generate devise USER
добавит необходимые столбцы в существующую модель USER
.
Используйте этот вспомогательный метод before_action :authenticate_user!
в верхней части вашего контроллера, чтобы проверить, вошел ли user
в систему или нет. если нет, то они будут перенаправлены на страницу входа.
Аутентификация с помощью утилиты
Добавить драгоценный камень в Gemfile:
gem 'devise'
Затем запустите команду bundle install
.
Используйте команду $ rails generate devise:install
чтобы сгенерировать требуемый файл конфигурации.
Настройте параметры URL по умолчанию для почтовой программы Devise в каждой среде. В среде разработки добавьте эту строку:
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
к вашему config/environments/development.rb
аналогично в этом файле редактирования config/environments/production.rb
и добавьте
config.action_mailer.default_url_options = { host: 'your-site-url'}
Затем создайте модель, используя: $ rails generate devise USER
Где USER
- это имя класса, для которого вы хотите реализовать аутентификацию.
Наконец, запустите: rake db:migrate
и вы все настроены.
Пользовательские виды
Если вам нужно настроить свои представления, вы можете использовать генератор rails generate devise:views
, который скопирует все представления в ваше приложение. Затем вы можете отредактировать их по своему желанию.
Если в вашем приложении имеется более одной модели Devise (например, User and Admin), вы заметите, что Devise использует те же представления для всех моделей. Devise предлагает простой способ настройки представлений. Установите config.scoped_views = true
внутри файла config/initializers/devise.rb
.
Вы также можете использовать генератор для создания видимых видов: rails generate devise:views users
Если вы хотите создать только несколько наборов представлений, например, для регистрируемого и подтверждаемого модуля, используйте флаг -v: rails generate devise:views -v registrations confirmations
Конфигурирование фильтров и помощников
Чтобы настроить контроллер с аутентификацией пользователя с помощью devise, добавьте это before_action: (если ваша модель разработки - «Пользователь»):
before_action :authenticate_user!
Чтобы проверить, был ли пользователь подписан, используйте следующий помощник:
user_signed_in?
Для текущего пользователя с подпиской используйте этот помощник:
current_user
Вы можете получить доступ к сеансу для этой области:
user_session
- Обратите внимание, что если ваша модель Devise называется
Member
вместоUser
, заменитеuser
выше наmember
OmniAuth
Сначала выберите свою стратегию аутентификации и добавьте ее в свой Gemfile
. Здесь вы можете найти список стратегий: https://github.com/intradea/omniauth/wiki/List-of-Strategies
gem 'omniauth-github', :github => 'intridea/omniauth-github'
gem 'omniauth-openid', :github => 'intridea/omniauth-openid'
Вы можете добавить это к своему промежуточному программному обеспечению rails следующим образом:
Rails.application.config.middleware.use OmniAuth::Builder do
require 'openid/store/filesystem'
provider :github, ENV['GITHUB_KEY'], ENV['GITHUB_SECRET']
provider :openid, :store => OpenID::Store::Filesystem.new('/tmp')
end
По умолчанию OmniAuth добавит /auth/:provider
к вашим маршрутам, и вы можете начать с использования этих путей.
По умолчанию, если есть сбой, omniauth перенаправляет /auth/failure
has_secure_password
Создать модель пользователя
rails generate model User email:string password_digest:string
Добавить модуль has_secure_password в модель пользователя
class User < ActiveRecord::Base has_secure_password end
Теперь вы можете создать нового пользователя с паролем
user = User.new email: '[email protected]', password: 'Password1', password_confirmation: 'Password1'
Проверка пароля с помощью метода проверки подлинности
user.authenticate('somepassword')
has_secure_token
Создать модель пользователя
# Schema: User(token:string, auth_token:string)
class User < ActiveRecord::Base
has_secure_token
has_secure_token :auth_token
end
Теперь, когда вы создаете нового пользователя, токены и auth_token автоматически генерируются
user = User.new
user.save
user.token # => "pX27zsMN2ViQKta1bGfLmVJE"
user.auth_token # => "77TMHrHJFvFDwodq8w7Ev2m7"
Вы можете обновлять маркеры с помощью функции regenerate_token
и regenerate_auth_token
user.regenerate_token # => true
user.regenerate_auth_token # => true