Ruby on Rails
Användarautentisering i rails
Sök…
Introduktion
Devise är en mycket kraftfull pärla, den låter dig registrera dig, logga in och logga ut alternativ efter installationen. Dessutom kan användaren lägga till autentiseringar och begränsningar i sina applikationer. Enheten kommer också med sina egna vyer, om användaren vill använda. En användare kan också anpassa anmälan och logga in formulär enligt dess behov och krav. Det bör noteras att Devise rekommenderar att du implementerar din egen inloggning om du är ny med skenor.
Anmärkningar
Vid tidpunkten för att generera utforma konfigureringar med hjälp av rails generate devise:install
, utforma kommer att lista upp ett antal instruktioner på terminalen att följa.
Om du redan har en USER
modell kommer att köra dessa kommandorails rails generate devise USER
och lägga till nödvändiga kolumner till din befintliga USER
modell.
Använd denna before_action :authenticate_user!
längst upp på din controller för att kontrollera om user
är inloggad eller inte. om inte, kommer de att omdirigeras till inloggningssidan.
Autentisering med hjälp av Devise
Lägg till pärla i Gemfile:
gem 'devise'
Kör sedan bundle install
kommandot.
Använd kommandot $ rails generate devise:install
att generera nödvändig konfigurationsfil.
Ställ in standard-URL-alternativ för Devise mailer i varje miljö Lägg till denna rad i utvecklingsmiljö:
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
till dina config/environments/development.rb
på liknande sätt i produktionen, redigera config/environments/production.rb
och lägg till
config.action_mailer.default_url_options = { host: 'your-site-url'}
Skapa sedan en modell med: $ rails generate devise USER
där USER
är det klassnamn som du vill implementera autentisering för.
Slutligen, kör: rake db:migrate
så är du redo.
Anpassade vyer
Om du behöver konfigurera dina vyer kan du använda rails generate devise:views
generator som kopierar alla vyer till din applikation. Sedan kan du redigera dem efter önskemål.
Om du har mer än en enhetsmodell i din applikation (till exempel användare och administratör) kommer du att märka att Devise använder samma vyer för alla modeller. Enhet erbjuder ett enkelt sätt att anpassa vyer. Ställ config.scoped_views = true
inuti filen config/initializers/devise.rb
.
Du kan också använda generatoren för att skapa scoped-vyer: rails generate devise:views users
Om du bara vill generera några uppsättningar av vyer, till exempel de för den registrerbara och bekräftbara modulen, använd -v-flaggan: rails generate devise:views -v registrations confirmations
Device Controller Filters & Helpers
För att ställa in en controller med användarautentisering med hjälp av plan, lägg till detta före_action: (förutsatt att din designmodell är 'User'):
before_action :authenticate_user!
För att verifiera om en användare är inloggad använder du följande hjälpare:
user_signed_in?
För den nuvarande inloggade användaren använder du denna hjälpare:
current_user
Du kan komma åt sessionen för det här omfånget:
user_session
- Observera att om din Devise modell kallas
Member
i stället förUser
, bytuser
ovan medmember
Omniauth
Välj först din autorisationsstrategi och lägg till den i din Gemfile
. Du hittar en lista över strategier här: https://github.com/intridea/omniauth/wiki/List-of-Strategies
gem 'omniauth-github', :github => 'intridea/omniauth-github'
gem 'omniauth-openid', :github => 'intridea/omniauth-openid'
Du kan lägga till detta till din rails mellanprogram så:
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
Som standard lägger OmniAuth till /auth/:provider
till dina rutter och du kan börja med att använda dessa sökvägar.
Om det finns ett fel, omdirigeras /auth/failure
till /auth/failure
has_secure_password
Skapa användarmodell
rails generate model User email:string password_digest:string
Lägg till has_secure_password-modul till användarmodell
class User < ActiveRecord::Base has_secure_password end
Nu kan du skapa en ny användare med lösenord
user = User.new email: '[email protected]', password: 'Password1', password_confirmation: 'Password1'
Verifiera lösenord med autentiseringsmetod
user.authenticate('somepassword')
has_secure_token
Skapa användarmodell
# Schema: User(token:string, auth_token:string)
class User < ActiveRecord::Base
has_secure_token
has_secure_token :auth_token
end
När du skapar en ny användare skapas automatiskt ett token och authent_token
user = User.new
user.save
user.token # => "pX27zsMN2ViQKta1bGfLmVJE"
user.auth_token # => "77TMHrHJFvFDwodq8w7Ev2m7"
Du kan uppdatera tokens med regenerate_token
och regenerate_auth_token
user.regenerate_token # => true
user.regenerate_auth_token # => true