Autentificarea în rails folosind Clearance

Clearance este un sistem simplu de autentificare cu e-mail și parola construit de echipa de la Thoughtbot. Ea a păstrat inconvenientele, dar intenționează să fie ușor de ignorat. Sistemul este întreținut în mod activ și puteți urmări GitHub.

În acest tutorial, veți vedea cum să integrați programul Clearance într-o aplicație Rails. Vom folosi o aplicație în miniatură. Sa incepem!

Noțiuni de bază

Veți începe prin generarea aplicației Rails. În scopul acestui tutorial, îmi voi spune numele tutsplus-clearance-.

rails new tutsplus-clearance-T

Asta va face magia.

Veți avea nevoie de bootstrap pentru a face aplicația să arate bine. Adăugați bijuteria Bootstrap la dvs. Gemfile.

# Gemfile ... bijuterie "bootstrap-sass"

Instalați bijuteria rulând instalare pachet.

Acum modificați cerere.SCSS  pentru a arata astfel:

# app / assets / stylesheets / application.scss @import 'bootstrap-sprockets'; @import 'bootstrap';

Clearance Setup

Deschide-ți Gemfile pentru a adăuga gemul Clearance.

# Gemfile "clearance-ul"

Acum, instalați bijuteria.

instalare pachet

În acest moment, executați comanda generatorului pentru a instala degajare.

șinele generează spațiu liber: instalați

Acest lucru va genera câteva ieșiri pe terminalul dvs., care arată ca și cele de mai jos:

crează config / initializers / clearance.rb inserați aplicația / controlorii / application_controller.rb crea app / models / user.rb create db / migrate / 20161115101323_create_users.rb ******************* ************************************************** *********** Pașii următori: 1. Configurați mailul pentru a crea adrese URL complete în e-mailuri: # config / environments / development, test .rb config.action_mailer.default_url_options = host: 'localhost: 3000 ' În producție ar trebui să fie numele de domeniu al aplicației. 2. Afișați sesiunea de utilizatori și clipește. De exemplu, în aspectul aplicației: <% if signed_in? %> Conectat ca: <%= current_user.email %> <%= button_to 'Sign out', sign_out_path, method: :delete %> <% else %> <%= link_to 'Sign in', sign_in_path %> <% end %> 
<% flash.each do |key, value| %>
<%= value %>
<% end %>
3. Migrați: rake db: migrați ********************************************** *************************************

Când ați executat comanda, în aplicația dvs. au fost generate câteva fișiere. Un astfel de fișier este clearance.rb, pe care îl puteți găsi în config / initializatori director. A Utilizator modelul a fost, de asemenea, generat și, împreună cu acesta, aveți și un fișier de migrare care arată astfel:

clasa CreateUsers < ActiveRecord::Migration def change create_table :users do |t| t.timestamps null: false t.string :email, null: false t.string :encrypted_password, limit: 128, null: false t.string :confirmation_token, limit: 128 t.string :remember_token, limit: 128, null: false end add_index :users, :email add_index :users, :remember_token end end

Conform rezultatelor, primul lucru pe care doriți să-l faceți este să editați config-ul dvs. de mediu. Pentru a face acest lucru, navigați la config / medii / development.rb și adăugați linia de mai jos, chiar deasupra Sfârșit delimitator.

... config.action_mailer.default_url_options = gazdă: 'localhost: 3000' sfârșit

Apoi, navigați la config / initializatori / clearance.rb pentru a le edita, iar când sunteți acolo, schimbați adresa de e-mail a expeditorului de la cea implicită la oricare dintre opțiunile dvs. Aceasta este ceea ce veți vedea când deschideți fișierul.

# config / initializers / clearance.rb Clearance.configure do | config config.mailer_sender = "[email protected]" sfârșit

Puteți să înlocuiți configurația implicită prin adăugarea în următorul fragment de cod și configurarea acestuia conform cerințelor dvs..

# config / initializers / clearance.rb Clearance.configure do | config config.allow_sign_up = true config.cookie_domain = ".example.com" config.cookie_expiration = lambda | cookies | 1.year.from_now.utc config.cookie_name = "remember_token" config.cookie_path = "/" config.routes = true config.httponly = false config.mailer_sender = "[email protected]" config.password_strategy = Clearance :: PasswordStrategies :: BCrypt config.redirect_url = "/" config.secure_cookie = false config.sign_in_guards = [] config.user_model = End user

Rulați comanda pentru a migra baza de date.

rake db: migrați

Deschide-ți PagesController și adăugați un index acțiune.

# app / controllers / pages_controller.rb clasă PagesController < ApplicationController def index end end

Apoi, creați o vizualizare pentru index acțiune pe care tocmai ați creat-o.

Adăugați fragmentul de cod de mai jos:

# App / opinii / pagini / index.html.erb 

Tutsplus Clearance

Bine ați venit pe pagina noastră de curățenie.

Editați rutele dvs. la:

# config / routes.rb Rails.application.routes.draw face rădăcină la: "pages # index" sfârșit

Creați un nume parțial _navigation.html.erb în interiorul aspecte director. Acesta va fi folosit pentru a face față tot ceea ce are de a face cu navigarea aplicației dvs..

Inserați următorul cod și salvați-l.

# App / opinii / machete / _navigation.html.erb  
<% flash.each do |key, value| %>
<%= value %>
<% end %>

Acces interzis 

Cu Clearance, aveți posibilitatea să creați acces restricționat la anumite pagini alese de dvs. în aplicația dvs. Să vedem cum se face.

Creați o vizualizare pentru a nou acțiune în app / views / pagini, numele fișierului ar trebui să fie new.html.erb. Lipiți codul de mai jos.

# App / opinii / pagini / new.html.erb 

Pagina restricționată

Această pagină este limitată la utilizatorii autentificați, dacă vedeți acest lucru înseamnă că sunteți un superstar!

Acum trebuie să adăugați linia de mai jos la config / routes.rb.

# config / routes.rb ... resurse: pagini, numai:: nou ... 

În cele din urmă, du-te la dvs. PagesController face ca ceea ce am mai jos.

# aplicații / controlori / pages_controller.rb ClassController < ApplicationController before_action :require_login, only: [:new] def index end def new end end

În codul de mai sus, facem uz de ajutorul Clearance, require_login, pentru a restricționa accesul la nou acțiune. Pentru a vedea cum funcționează, porniți serverul de șine rulând rails server de la terminalul tău. Punctați browserul dvs. la http: // locahost: 3000 / pagini / noi și ar trebui să vă redirecționeze la pagina de sign-in.

Clearance-ul oferă, de asemenea, constrângeri de rutare care pot fi utilizate pentru controlul accesului.

# config / routes.rb Rails.application.routes.draw face constrângeri Clearance :: Constrângeri :: SignedOut.new rădăcină la: 'pages # index' constrângeri constrângeri Clearance :: Constrângeri :: SignedIn.new rădăcină la: "pagini #new ', ca:: signed_in_root end end

În codul de mai sus, a fost creat un alt traseu pentru utilizatorii autentificați.

Valorile prestabilite pentru depășirea valorii

Multe lucruri se întâmplă în spatele scenei când începeți să utilizați Clearance, lucruri pe care nu le puteți vedea. Este posibil să veniți un moment în care doriți să personalizați lucrurile în mod diferit, în funcție de specificațiile aplicației dvs. Clearance vă permite să înlocuiți configurația implicită.

Pentru a ignora (sau a genera) rute de eliberare, executați această comandă de la terminalul dvs..

șinele generează clearance-ul: rutele

Fișierul dvs. de rute ar trebui să arate astfel:

# config / routes.rb Rails.application.routes.draw resurse: parole, controler: "clearance-ul / parolele", numai: [: crea]: resursa: : crea] resurse: utilizatori, controler: "clearance-ul / utilizatorii", numai: [: crea] face resursa: parola, controler: "clearance / passwords", numai: [: create; sign_in "=>" clearance-ul / sesiunile # new ", ca:" sign_in "delete" / sign_out "=> ", ca:" sign_up "rădăcină la:" pagini # index "resurse: pagini, numai:: sfârșitul nou

Comanda va seta și config.routes setarea la fals în config / initializatori / clearance.rb fişier. Aceasta înseamnă că fișierul personalizat care tocmai a fost generat va fi utilizat.

Pentru a genera vizualizări pentru modificare, executați:

șinele generează clearance-ul: vederi

Unele dintre fișierele care vor fi generate includ:

 app / views / passwords / create.html.ruge app / views / passwords / edit.html.web app / views / passwords / new.html.emp app / views / sesiuni / _form.html.emp app / views / app.new.html.py app / views / users / _form.html.py app / views / users / new.html.erb config / locales / clearance.en.yml

Veți vedea o solicitare în terminalul dvs. cerând să vă înlocuiți app / opinii / machete / application.html.erb fişier. Alegeți opțiunea dorită.

aspecte

În mod prestabilit, Clearance folosește aspectul implicit al aplicației. Dacă doriți să schimbați aspectul pe care Clearance-ul îl folosește la randarea vizualizărilor, pur și simplu specificați aspectul într-un inițializator.

Clearance :: PasswordsController.layout Clearance :: my_passwords_layout Clearance :: SessionsController.layout Clearance :: my_sessions_layout :: UsersController.layout "my_admin_layout"

Metode de ajutor

Clearance vă oferă metode de ajutor care pot fi utilizate în aplicația dumneavoastră controlere, vizualizari, și ajutoare. Aceste metode includ inscris?, signed_out?, și utilizator curent. De exemplu:

<% if signed_in? %> <%= current_user.email %> <%= button_to "Sign out", sign_out_path, method: :delete %> <% else %> <%= link_to "Sign in", sign_in_path %> <% end %>

Concluzie

Clearance-ul are multe de oferit când vine vorba de autentificare, deci asigurați-vă că îl veți încerca în următorul proiect. Puteți afla mai multe prin verificarea paginii GitHub.

Cod