Ruby on Rails
Uwierzytelnianie użytkownika w szynach
Szukaj…
Wprowadzenie
Devise to bardzo potężny klejnot, który umożliwia rejestrację, zalogowanie się i wylogowanie opcji zaraz po instalacji. Ponadto użytkownik może dodawać uwierzytelnienia i ograniczenia do swoich aplikacji. Devise ma również własne widoki, jeśli użytkownik chce z niego korzystać. Użytkownik może również dostosować formularze rejestracji i logowania w zależności od potrzeb i wymagań. Należy zauważyć, że Devise zaleca wdrożenie własnego loginu, jeśli dopiero zaczynasz korzystać z railsów.
Uwagi
Podczas generowania konfiguracji devise przy użyciu rails generate devise:install
, devise wyświetli listę instrukcji na terminalu do naśladowania.
Jeśli masz już model USER
, uruchomienie tego polecenia rails generate devise USER
doda niezbędne kolumny do istniejącego modelu USER
.
before_action :authenticate_user!
skorzystaniem z tej metody pomocniczej before_action :authenticate_user!
u góry kontrolera, aby sprawdzić, czy user
jest zalogowany, czy nie. jeśli nie, zostaną przekierowani na stronę logowania.
Uwierzytelnianie za pomocą Devise
Dodaj klejnot do Gemfile:
gem 'devise'
Następnie uruchom polecenie bundle install
.
Użyj polecenia $ rails generate devise:install
aby wygenerować wymagany plik konfiguracyjny.
Ustaw domyślne opcje adresu URL dla Devise mailer w każdym środowisku W środowisku programistycznym dodaj ten wiersz:
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
do config/environments/development.rb
podobnie w produkcji edytuj plik config/environments/production.rb
i dodaj
config.action_mailer.default_url_options = { host: 'your-site-url'}
Następnie utwórz model, używając: $ rails generate devise USER
Gdzie USER
to nazwa klasy, dla której chcesz wdrożyć uwierzytelnianie.
Na koniec uruchom: rake db:migrate
i wszystko gotowe.
Widoki niestandardowe
Jeśli musisz skonfigurować swoje widoki, możesz użyć generatora rails generate devise:views
generatora rails generate devise:views
, który skopiuje wszystkie widoki do aplikacji. Następnie możesz je edytować według potrzeb.
Jeśli masz w aplikacji więcej niż jeden model Devise (na przykład Użytkownik i Administrator), zauważysz, że Devise używa tych samych widoków dla wszystkich modeli. Devise oferuje łatwy sposób dostosowywania widoków. Ustaw config.scoped_views = true
w pliku config/initializers/devise.rb
.
Możesz także użyć generatora do tworzenia widoków o zasięgu: rails generate devise:views users
Jeśli chcesz wygenerować tylko kilka zestawów widoków, takich jak te dla rejestrowalnego i potwierdzalnego modułu, użyj flagi -v: rails generate devise:views -v registrations confirmations
Opracuj filtry kontrolerów i pomocników
Aby skonfigurować kontroler z uwierzytelnianiem użytkownika za pomocą devise, dodaj to przed działaniem: (zakładając, że twoim wymyślonym modelem jest „User”):
before_action :authenticate_user!
Aby sprawdzić, czy użytkownik jest zalogowany, użyj następującego pomocnika:
user_signed_in?
Dla bieżącego zalogowanego użytkownika użyj tego pomocnika:
current_user
Możesz uzyskać dostęp do sesji dla tego zakresu:
user_session
- Pamiętaj, że jeśli Twój model Devise nosi nazwę
Member
zamiastUser
, zastąp powyższegouser
member
Omniauth
Najpierw wybierz strategię uwierzytelniania i dodaj ją do swojego Gemfile
. Możesz znaleźć listę strategii tutaj: https://github.com/intridea/omniauth/wiki/List-of-Strategies
gem 'omniauth-github', :github => 'intridea/omniauth-github'
gem 'omniauth-openid', :github => 'intridea/omniauth-openid'
Możesz dodać to do swojego oprogramowania pośredniego:
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
Domyślnie OmniAuth doda do twoich tras /auth/:provider
i możesz zacząć od korzystania z tych ścieżek.
Domyślnie, jeśli wystąpi awaria, omniauth przekieruje do /auth/failure
has_secure_password
Utwórz model użytkownika
rails generate model User email:string password_digest:string
Dodaj moduł has_secure_password do modelu użytkownika
class User < ActiveRecord::Base has_secure_password end
Teraz możesz utworzyć nowego użytkownika z hasłem
user = User.new email: '[email protected]', password: 'Password1', password_confirmation: 'Password1'
Zweryfikuj hasło za pomocą metody uwierzytelnienia
user.authenticate('somepassword')
has_secure_token
Utwórz model użytkownika
# Schema: User(token:string, auth_token:string)
class User < ActiveRecord::Base
has_secure_token
has_secure_token :auth_token
end
Teraz, gdy tworzysz nowego użytkownika, token i auth_token są generowane automatycznie
user = User.new
user.save
user.token # => "pX27zsMN2ViQKta1bGfLmVJE"
user.auth_token # => "77TMHrHJFvFDwodq8w7Ev2m7"
Możesz zaktualizować tokeny za pomocą regenerate_token
i regenerate_auth_token
user.regenerate_token # => true
user.regenerate_auth_token # => true