Ruby on Rails Devise authentication
Aggiungete devise nel vostro Gemfile e lanciate "bundle install".
Ora create i file di configurazione necessari:
rails generate devise:install
Definite l'url che verra' utilizzata per i link di conferma sulle email di registrazione. In configurations/environments/development.rb
#Devise email
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
Creiamo il file di migrazione e lo user model
rails generate devise User
Nello User model appena creato Models/user.rb , possiamo scegliere quali moduli includere od escludere, semplicemente togliendo quelli di default o aggiungendo quelli presenti nel commento del file user.rb. A mio avviso quelli di default vanno piu' che bene.
class User < ActiveRecord::Base # Include default devise modules. Others available are: # :token_authenticatable, :confirmable, :lockable and :timeoutable :recoverable, devise :database_authenticatable, :registerable, :rememberable, :trackable, :validatable # Setup accessible (or protected) attributes for your model attr_accessible :email, :password, :password_confirmation, :remember_me end
Ora aprite il file Migrations/***devise_create_users.rb e commentate o aggiungete i moduli che avete aggiunto to tolto nello User Model. Poi fate la migrazione.
rake db:migrate
Con "rake routes" potete vedere tutte le routes messe a disposizione dalla vostra applicazione. Trovo questo comendo davvero molto utile, anche nel debug di un applicazione, o quando vogliamo verificare che ogni action abbia la sua view ben fatta.Un'altra cosa che cakePHP non ha (cominciano ad essere tante).
Ora se puntate il browser alla seguente url /users/sign_in potrete loggarvi. Per registrarvi andate qui /users/sign_up. Io ho incontrato il seguente errore:
No route matches "/users/sign_up"
Per risolverlo ho definito lo scope nel file routes, come spiegato qui http://stackoverflow.com/questions/2349604/using-devise-with-rails-3-beta
Per visualizzare i messaggi d'errore nella vostra applicazione, aggiungete queste linee di codice nel vostro application.html.erb.
<%- flash.each do |name, msg| -%>
<%= content_tag :div, msg, :id => "flash_#{name}" if msg.is_a?(String) %>
<%- end -%>
Sempre in application.html.erb, aggiungete i link alle azioni sign_in e sign_out. Scoprite i relativi path attraverso "rake routes" e aggiungete questo codice dopo il tag body:
<div id="user_nav">signed in as</div>
Per circoscrivere il raggio d'azione di un utente non loggato all'interno della nostra applicazione, definiamo quali azini sono ad esso concesse. Poniamo il caso che solo un utente loggato puo' creare o modificare un post, mentre l'utente sloggato puo' solo vederli.
Nel nostro "posts_controller" aggiungiamo la seguente funzione:
before_filter :authenticate_user!, :except => [:index, :show]
Per modificare le views di devise, lanciamo "rails g devise:views", ed otterremo un output simile a questo:
create app/views/devise create app/views/devise/confirmations/new.html.erb create app/views/devise/mailer/confirmation_instructions.html.erb create app/views/devise/mailer/reset_password_instructions.html.erb create app/views/devise/mailer/unlock_instructions.html.erb create app/views/devise/passwords/edit.html.erb create app/views/devise/passwords/new.html.erb create app/views/devise/registrations/edit.html.erb create app/views/devise/registrations/new.html.erb create app/views/devise/sessions/new.html.erb create app/views/devise/shared/_links.erb create app/views/devise/unlocks/new.html.erb
Modifichiamo i seguenti file a nostro piacimento. Se vogliamo modificare i messaggi d'errore, mettiamo mano al file config/locales/devise_en.yml. Se invece vogliamo modificare le regole di controllo per la registrazione (es passare da "Password is too short (minimum is 6 characters)" a "Password is too short (minimum is 8 characters)") modifichiamo il file initializers/devise.rb.
Per modificare le URL di default con le quali avvengono le azioni di login e logout, apriamo il file routes.rb
devise_for :users, :path_names => {:sign_in => "login", :sign_up => "logout"}
.
Il nostro futuro user si logga inserendo email e password, come fare se in futuro ci venisse richiesto di sostituire il campo email con il campo username? prima di tutto aggiungiamo la colonna necessaria:
rails generate migration AddUsernameToUsers username:string rake db:migrate
Ora in config/initializers/devise.rb aggiungiamo
config.authentication_keys = [ :username ]
Questo tutorial e' tratto dai seguenti railcasts:
http://railscasts.com/episodes/209-introducing-devise
http://railscasts.com/episodes/210-customizing-devise
Qua la pagina del progetto su github.
Ruby on Rails, creazione pagine statiche
Supponiamo di avere delle pagine che non richiedono interazioni con il databasa, per esempio 'info', 'terms' e 'contact'.
creiamo le views per le pagine statiche così:
cd app/views mkdir pages touch pages/info.html.erb touch pages/terms.html.erb touch pages/contact.html.erb
Creiamo un controller chiamato pages_controller.rb
class PagesController < ApplicationController
def show
page = params[:id]
render :template => "pages/#{params[:id]}"
end
end
in routes.rb aggiungiamo questa regola
map.page ':id', :controller => 'pages',
:action => 'show',
:requirements => { :id => /info|terms|contact/ }
nel nostro layout, aggiungiamo il menu con le voci appena create:
<%= link_to 'Info', page_path('info') %>
<%= link_to 'Terms', page_path('terms') %>
<%= link_to 'Contact', page_path('contact') %>
Ruby On Rails Tutorial, autenticazione con clearance
Clearance è una gem per Ruby On Rails che permette di integrare velocemente un sistema di autenticazione e registrazione degli utenti. Per installarla nella vostra app:
da root
# gem install clearance
poi da utente normale, modificate il file environment.rb e aggiungete la linea "config.gem "clearance", :version => "0.8.8"".
Spostatevi nella directory della vostra app.
rake gems:install rake gems:unpack
Ora, nella vostra cartella vendor/gems dovrebbe esserci clearance. Installare le gemme in vendor
quindi generate i controller, le view e i model necessari:
script/generate clearance
per aggiungere la richiesta d'autenticazione nel vostro controller, semplicemente aggiungete questo codice nel vostro metodo before_filter
before_filter :authenticate
Per poter includere i link al login/logout nella vostra applicazione, aggiungete nella view
<div id="navigation">
<% if signed_in? %>
<%= link_to 'Sign out', sign_out_path %>
<% else %>
<%= link_to 'Sign up', sign_up_path %>
<%= link_to 'Sign in', sign_in_path %>
<% end %>
</div>
Se tutto ha funzionato, a questo indirizzo dovreste vedere il form di login http://localhost:3000/sign_in.
Per una lista completa delle url raggiungibili:
rake routes
Segnalo la ML del progetto e il wiki su github, utili nel caso dovreste avere difficoltà durante la configurazione.