Ruby on Rails
Benutzerauthentifizierung in Rails
Suche…
Einführung
Devise ist ein sehr mächtiges Juwel, mit dem Sie sich direkt nach der Installation anmelden, an- und abmelden können. Darüber hinaus kann der Benutzer seinen Anwendungen Authentifizierungen und Einschränkungen hinzufügen. Devise enthält auch eigene Ansichten, wenn der Benutzer dies verwenden möchte. Ein Benutzer kann die Anmelde- und Anmeldeformulare je nach Bedarf und Anforderung anpassen. Es wird darauf hingewiesen, dass Devise empfiehlt, dass Sie Ihr eigenes Login implementieren, wenn Sie noch nicht mit Rail vertraut sind.
Bemerkungen
Zum Zeitpunkt der Generierung von devise-Konfigurationen mithilfe von schienen rails generate devise:install
, listet devise eine Reihe von Anweisungen auf dem Terminal auf, die zu befolgen sind.
Wenn Sie bereits über ein USER
Modell verfügen, können Sie mit diesem Befehlsschienengenerator rails generate devise USER
erforderlichen Spalten an Ihr vorhandenes USER
Modell anhängen.
Verwenden Sie diese before_action :authenticate_user!
oben auf dem Controller, um zu überprüfen, ob der user
angemeldet ist oder nicht. Andernfalls werden sie auf die Anmeldeseite umgeleitet.
Authentifizierung mit Devise
Edelstein zum Gemfile hinzufügen:
gem 'devise'
Führen Sie dann den Befehl zum bundle install
Pakets aus.
Verwenden Sie den Befehl $ rails generate devise:install
, um die erforderliche Konfigurationsdatei zu generieren.
Richten Sie die Standard-URL-Optionen für den Devise-Mailer in jeder Umgebung ein. Fügen Sie in der Entwicklungsumgebung folgende Zeile hinzu:
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
in Ihre config/environments/development.rb
In ähnlicher Weise bearbeiten Sie diese Datei in der Datei config/environments/production.rb
und fügen Sie hinzu
config.action_mailer.default_url_options = { host: 'your-site-url'}
Erstellen Sie anschließend ein Modell mit folgendem $ rails generate devise USER
: $ rails generate devise USER
Wobei USER
der Klassenname ist, für den Sie die Authentifizierung implementieren möchten.
Zum Schluss: rake db:migrate
und du bist fertig.
Benutzerdefinierte Ansichten
Wenn Sie Ihre Ansichten konfigurieren müssen, können Sie den Generatoren für die rails generate devise:views
, der alle Ansichten in Ihre Anwendung kopiert. Sie können sie dann wie gewünscht bearbeiten.
Wenn sich in Ihrer Anwendung mehr als ein Devise-Modell befindet (z. B. Benutzer und Administrator), werden Sie feststellen, dass Devise für alle Modelle die gleichen Ansichten verwendet. Devise bietet eine einfache Möglichkeit, Ansichten anzupassen. config.scoped_views = true
Sie config.scoped_views = true
in der Datei config/initializers/devise.rb
.
Sie können den Generator auch verwenden, um Bereichsansichten zu erstellen: rails generate devise:views users
Wenn Sie nur einige Ansichten erstellen möchten, beispielsweise die für das registrierbare und bestätigbare Modul, verwenden Sie das Flag -v: rails generate devise:views -v registrations confirmations
Entwickeln Sie Controller-Filter und Helfer
Um einen Controller mit Benutzerauthentifizierung mit devise einzurichten, fügen Sie Folgendes vor before_action hinzu: (vorausgesetzt, Ihr Devise-Modell ist 'User'):
before_action :authenticate_user!
Um zu überprüfen, ob ein Benutzer angemeldet ist, verwenden Sie den folgenden Helfer:
user_signed_in?
Verwenden Sie für den aktuell angemeldeten Benutzer diesen Helfer:
current_user
Sie können auf die Sitzung für diesen Bereich zugreifen:
user_session
- Wenn Ihr Devise-Modell als
Member
stattUser
, ersetzen Sie den obigenuser
durchmember
Omniauth
Wählen Sie zuerst Ihre Auth-Strategie und fügen Sie sie Ihrem Gemfile
. Eine Liste der Strategien finden Sie hier: https://github.com/intridea/omniauth/wiki/List-of-Strategies
gem 'omniauth-github', :github => 'intridea/omniauth-github'
gem 'omniauth-openid', :github => 'intridea/omniauth-openid'
Sie können dies Ihrer Rail-Middleware wie folgt hinzufügen:
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
Standardmäßig fügt OmniAuth den Routen /auth/:provider
, und Sie können mit diesen Pfaden beginnen.
Wenn ein Fehler auftritt, wird Omniauth standardmäßig zu /auth/failure
umgeleitet
has_secure_password
Erstellen Sie ein Benutzermodell
rails generate model User email:string password_digest:string
Fügen Sie dem Benutzermodell das Modul has_secure_password hinzu
class User < ActiveRecord::Base has_secure_password end
Jetzt können Sie einen neuen Benutzer mit Passwort erstellen
user = User.new email: '[email protected]', password: 'Password1', password_confirmation: 'Password1'
Überprüfen Sie das Kennwort mit der Authentifizierungsmethode
user.authenticate('somepassword')
has_secure_token
Erstellen Sie ein Benutzermodell
# Schema: User(token:string, auth_token:string)
class User < ActiveRecord::Base
has_secure_token
has_secure_token :auth_token
end
Wenn Sie nun einen neuen Benutzer erstellen, werden automatisch ein Token und ein auth_token generiert
user = User.new
user.save
user.token # => "pX27zsMN2ViQKta1bGfLmVJE"
user.auth_token # => "77TMHrHJFvFDwodq8w7Ev2m7"
Sie können die Token mit regenerate_token
und regenerate_auth_token
aktualisieren
user.regenerate_token # => true
user.regenerate_auth_token # => true