I noen av mine tidligere artikler om bildeopplasting i Rails, gjorde jeg omtale av Devise, men gikk ikke dypt inn i den. I denne opplæringen vil jeg lære deg om Devise.
Klar? La oss komme i gang!
Devise er en autentiseringsløsning for Rails bygget med Warden og levert av de fantastiske menneskene på Plataformatec. Devise tilbyr forskjellige moduler:
For formålet med denne opplæringen, kommer vi til å generere et Rails-program som vi skal bruke for å sjekke ut arbeidet til Devise. La oss fortsette!
skinner nytt utfør-app -T
De -T
flagg forteller Rails å generere programmet uten standard test suite. Naviger til søknadskatalogen din og slipp de følgende edelstenene i din Gemfile
.
#Gemfile gem 'devise', '~> 4,1' perle 'bootstrap-sass', '~> 3,3'
Installer nå Devise og Bootstrap-edelstenene du nettopp har lagt til.
bunt installasjon
Gi nytt navn til din app / assets / stilark / application.css
fil til app / assets / stilark / application.scss
og legg til følgende linjer i den:
# app / assets / stylesheets / application.scss @ import "bootstrap-sprockets"; @import "bootstrap";
Åpne opp app / eiendeler / Javascript / application.js
fil og krever bootstrap-tannhjul
. Mine ser slik ut:
# app / assets / javascripts / application.js // = krever jquery // = krever bootstrap-kjetting // // krever jquery_ujs // = krever turbolinks // = require_tree .
Deretter må du kjøre kommandoen Rails for å installere konfigurasjonsfilene for Devise. Du gjør det ved å kjøre denne kommandoen:
skinner generere utforme: installere
Kommandoen genererer følgende på din terminal. Du bør lese det for å forstå hva som skjedde.
lage config / initializers / devise.rb opprett config / locales / devise.en.yml =============================== ========================================== Noen oppsett deg må gjøre manuelt hvis du ikke har ennå: 1. Kontroller at du har definert standard url-alternativer i miljøfilene dine. Her er et eksempel på default_url_options egnet for et utviklingsmiljø i config / environments / development.rb: config.action_mailer.default_url_options = vert: 'localhost', port: 3000 I produksjon, skal verten settes til den faktiske verten for din søknad. 2. Kontroller at du har definert root_url til * noe * i config / routes.rb. For eksempel: root til: "home # index" 3. Kontroller at du har flashmeldinger i app / visninger / layouts / application.html.erb. For eksempel:<%= notice %>
<%= alert %>
4. Hvis du bare distribuerer på Heroku med Rails 3.2, kan det hende du vil angi: config.assets.initialize_on_precompile = false På config / application.rb tvinger programmet ditt til ikke å få tilgang til DB- eller lastmodellene når du forkompilerer dine eiendeler. 5. Du kan kopiere Devise-visninger (for tilpasning) til appen din ved å kjøre: rails g devise: views ============================= ================================================== =
Kommandoen genererer også to filer, som du finner i config
katalogen. Det gir oss også noen instruksjoner om hva vi skal gjøre.
Naviger til søknadslayouten din, app / visninger / oppsett / application.html.erb
, og få det til å se ut som det jeg har under:
# App / visninger / oppsett / application.html.erbDeviseApp <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => ekte%> <%= javascript_include_tag 'application', 'data-turbolinks-track' => ekte%> <%= csrf_meta_tags %><%= notice %>
<%= alert %>
<%= yield %>
Du må definere standard nettadressevalg for utviklingsmiljøet ditt. Legg til koden nedenfor i konfig / miljøer / development.rb
.
# config / environments / development.rb config.action_mailer.default_url_options = vert: 'localhost', port: 3000
Nå må du opprette en Bruker
modell for Devise. Du kan gjøre det ved å bruke terminalen din.
skinner genererer utvikle bruker
Dette vil generere en user.rb
filen i din app / modeller
katalogen. Den genererte filen vil se slik ut:
klassen bruker < ActiveRecord::Base # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable end
Du kan se at den inneholder standardmodulene jeg nevnte ovenfor. Kommandoen du løp endret også din config / routes.rb
fil ved å legge til en rute for å utarbeide. Du bør sjekke det ut.
På dette tidspunktet må du migrere databasen din. Du gjør det ved å kjøre:
rake db: migrere
Nå må du opprette en PagesController
og pakk Devise-godkjenning rundt det - dette forhindrer uautoriserte personer i å se siden.
skinner genererer kontroller Sider indeks
Åpne ruteplanen din og sett inn roten til søknaden din.
# config / routes.rb Rails.application.routes.draw gjør devise_for: brukere rot til: "sider # index" slutten
Åpne opp din PagesController
og legg til godkjenning for din index
og ny
sider.
# app / controllers / pages_controller.rb klasse PagesController < ApplicationController before_action :authenticate_user!, only: [:index, :new] def index end def new end end
Koden viser at index
og ny
sider er kun tilgjengelige for registrerte brukere. Åpne opp terminalen din og start din skinner server
. Pek nettleseren din til http: // localhost: 3000
og du blir automatisk omdirigert til Devise-påloggingssiden.
Standardinnretningen for å logge på Devise innebærer bruk av e-postadresse og passord. Hva om du vil aktivere brukerne å logge på med sitt unike brukernavn? Hvis det er det du vil, er det mulig. La oss se hvordan.
Kjør kommandoen:
skinner genererer migrasjon AddUsernameToUSers brukernavn: streng
Dette vil legge til en ny kolonne for brukernavn
i din brukere
bord. Overfør databasen din.
rake db: migrere
Du må legge til et felt i visningene dine der brukerne kan skrive inn brukernavnet. Når du går til din app / visninger
katalog, vil du ikke finne noen filer som gjør visningen av Devise. Dette skyldes at Devise laster visningene fra sin gemset. For å tilpasse det må du generere kopier av visningene. Kommandoen nedenfor gjør det magiske.
skinner genererer utforme: visninger
Dette vil generere noen mapper og filer i din app / visninger
katalog.
Du må redigere siden for å logge på, registrere deg og oppdatere brukerinformasjon. Bare lim inn blokkene med kode nedenfor i deres respektive filer.
# App / visninger / tenke / registreringer / new.html.erbMelde deg på
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> <%= devise_error_messages! %><%= f.label :email %>
<%= f.email_field :email, autofocus: true, class: "form-control" %><%= f.label :username %> <%= f.text_field :username, class: "form-control" %><%= f.label :password %> <% if @minimum_password_length %> (<%= @minimum_password_length %> tegn minimum) <% end %>
<%= f.password_field :password, autocomplete: "off", class: "form-control" %><%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation, autocomplete: "off", class: "form-control" %><%= f.submit "Sign up", class: "btn btn-primary" %><% end %> <%= render "devise/shared/links" %>
# App / visninger / tenke / registreringer / edit.html.erbRedigere <%= resource_name.to_s.humanize %>
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: method: :put ) do |f| %> <%= devise_error_messages! %><%= f.label :email %><% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
<%= f.email_field :email, autofocus: true, class: "form-control" %>For tiden venter bekreftelse på: <%= resource.unconfirmed_email %><% end %><%= f.label :username %> <%= f.text_field :username, class: "form-control" %><%= f.label :password %> (la være tom hvis du ikke vil endre den)
<%= f.password_field :password, autocomplete: "off", class: "form-control" %><%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation, autocomplete: "off", class: "form-control" %><%= f.label :current_password %> (vi trenger ditt nåværende passord for å bekrefte endringene dine)
<%= f.password_field :current_password, autocomplete: "off", class: "form-control" %><%= f.submit "Update", class: "btn btn-primary" %><% end %>Avbryt kontoen min
Ulykkelig? <%= button_to "Cancel my account", registration_path(resource_name), data: confirm: "Are you sure?" , method: :delete %>
<%= link_to "Back", :back %>
# App / visninger / tenke / økter / new.html.erbLogg Inn
<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %><%= f.label :username %>
<%= f.text_field :username, autofocus: true, class: "form-control" %><%= f.label :password %><% if devise_mapping.rememberable? -%>
<%= f.password_field :password, autocomplete: "off", class: "form-control" %><%= f.check_box :remember_me %> <%= f.label :remember_me %><% end -%><%= f.submit "Log in", class: "btn btn-primary" %><% end %> <%= render "devise/shared/links" %>
Bruk tekstredigeringsprogrammet til å navigere til app / kontrollere / application_controller.rb
. Du må endre den for å tillate bruk av brukernavn. Endre det slik at det ser ut som dette:
# app / controllers / application_controller.rb klasse ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. protect_from_forgery with: :exception before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters added_attrs = [:username, :email, :password, :password_confirmation, :remember_me] devise_parameter_sanitizer.permit :sign_up, keys: added_attrs devise_parameter_sanitizer.permit :account_update, keys: added_attrs end end
Nå kan en bruker logge på med sitt brukernavn. På dette punktet er det noe som ikke stemmer med søknaden din. Når en bruker logger inn, er det ikke mulig å logge ut. Dette resulterer ikke i en flott brukeropplevelse. Jeg skal vise deg hvordan du kan fikse det.
Fra din terminal, opprett en ny katalog som heter delt
i din app / visninger
mappe.
mkdir app / visninger / delt berøringsapp / visninger / delt / _navigation.html.erb
Filen du opprettet ovenfor er delvis hvor koden for navigasjonslinjen din vil bli skrevet. Slett i følgende kode.
# App / visninger / delt / _navigation.html.erb
Nå må du gjøre navigasjonsfeltet i programoppsettet ditt. Åpne opp app / visninger / oppsett / application.html.erb
og slipp koden for å gjengi navigasjonslinjen.
# App / visninger / oppsett / application.html.erb ...<%= render "shared/navigation" %>...<%= notice %>
<%= alert %>
I denne delen lærte du å installere Devise og legge til godkjenning på sidene dine. Jeg nevnte også en delvis. Jeg vil dekke det i en egen opplæring.
I neste del skal vi dekke noen områder som er mer avanserte enn dette. Jeg håper dette var verdt tiden din!