Ruby on Rails
Gebruikersauthenticatie op rails
Zoeken…
Invoering
Devise is een zeer krachtig juweeltje, waarmee je je kunt aanmelden, aanmelden en afmelden opties net na de installatie. Bovendien kan de gebruiker authenticaties en beperkingen aan zijn applicaties toevoegen. Devise komt ook met zijn eigen weergaven, als de gebruiker wil gebruiken. Een gebruiker kan ook het aanmelden en het aanmelden van formulieren aanpassen aan zijn behoefte en vereiste. Opgemerkt moet worden dat Devise aanbeveelt dat u uw eigen login implementeert als u nieuw bent bij rails.
Opmerkingen
Op het moment van het genereren van bedenken configs met behulp van rails generate devise:install
, bedenken zal een aantal instructies op de terminal weergeven die moeten worden gevolgd.
Als u al een USER
model hebt, zal het uitvoeren van deze opdrachtrails rails generate devise USER
nodige kolommen toevoegen aan uw bestaande USER
model.
Gebruik deze helper-methode voor het before_action :authenticate_user!
bovenaan uw controller om te controleren of de user
is aangemeld of niet. zo niet, dan worden ze doorgestuurd naar de inlogpagina.
Verificatie met Devise
Gem toevoegen aan de Gemfile:
gem 'devise'
Voer vervolgens de opdracht bundle install
uit.
Gebruik opdracht $ rails generate devise:install
om het vereiste configuratiebestand te genereren.
Stel de standaard URL-opties in voor de Devise-mailer in elke omgeving Voeg in ontwikkelomgeving deze regel toe:
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
naar uw config/environments/development.rb
evenzo in productie dit edit config/environments/production.rb
bestand en toevoegen
config.action_mailer.default_url_options = { host: 'your-site-url'}
Maak vervolgens een model met: $ rails generate devise USER
waarbij USER
de USER
is waarvoor u authenticatie wilt implementeren.
Voer tot slot: rake db:migrate
en je bent helemaal klaar.
Aangepaste weergaven
Als u uw weergaven moet configureren, kunt u de rails generate devise:views
die alle weergaven naar uw toepassing kopieert. Vervolgens kunt u ze naar wens bewerken.
Als u meer dan één Devise-model in uw toepassing hebt (bijvoorbeeld Gebruiker en Beheerder), zult u merken dat Devise voor alle modellen dezelfde weergaven gebruikt. Devise biedt een eenvoudige manier om weergaven aan te passen. Set config.scoped_views = true
in het bestand config/initializers/devise.rb
.
U kunt de generator ook gebruiken om scoped views te maken: rails generate devise:views users
Als u slechts enkele sets weergaven wilt genereren, zoals die voor de registreerbare en bevestigbare module, gebruik dan de vlag -v: rails generate devise:views -v registrations confirmations
Devise Controller Filters & Helpers
Om een controller in te stellen met gebruikersauthenticatie met behulp van devise, voegt u dit toe voor extra: (ervan uitgaande dat uw devise-model 'Gebruiker' is):
before_action :authenticate_user!
Gebruik de volgende helper om te controleren of een gebruiker is aangemeld:
user_signed_in?
Gebruik de helper voor de huidige aangemelde gebruiker:
current_user
U hebt toegang tot de sessie voor dit bereik:
user_session
- Merk op dat als uw Devise-model
Member
wordt genoemd in plaats vanUser
,user
hierboven wordt vervangen doormember
Omniauth
Kies eerst uw verificatiestrategie en voeg deze toe aan uw Gemfile
. Je kunt hier een lijst met strategieën vinden: https://github.com/intridea/omniauth/wiki/List-of-Strategies
gem 'omniauth-github', :github => 'intridea/omniauth-github'
gem 'omniauth-openid', :github => 'intridea/omniauth-openid'
U kunt dit als volgt aan uw rails-middleware toevoegen:
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 voegt standaard /auth/:provider
aan uw routes en u kunt beginnen met deze paden.
Als er een storing is, zal omniauth standaard omleiden naar /auth/failure
has_secure_password
Maak een gebruikersmodel
rails generate model User email:string password_digest:string
Voeg has_secure_password module toe aan Gebruikersmodel
class User < ActiveRecord::Base has_secure_password end
U kunt nu een nieuwe gebruiker met wachtwoord maken
user = User.new email: '[email protected]', password: 'Password1', password_confirmation: 'Password1'
Controleer wachtwoord met authenticatiemethode
user.authenticate('somepassword')
has_secure_token
Maak een gebruikersmodel
# Schema: User(token:string, auth_token:string)
class User < ActiveRecord::Base
has_secure_token
has_secure_token :auth_token
end
Wanneer u nu een nieuwe gebruiker maakt, worden automatisch een token en auth_token gegenereerd
user = User.new
user.save
user.token # => "pX27zsMN2ViQKta1bGfLmVJE"
user.auth_token # => "77TMHrHJFvFDwodq8w7Ev2m7"
U kunt de tokens bijwerken met regenerate_token
en regenerate_auth_token
user.regenerate_token # => true
user.regenerate_auth_token # => true