#21 Super Simple Authentication
Dans l'épisode précédent, nous vous avons montré comment afficher ou cacher nos liens d'administration en fonction du
statut de l'utilisateur courant. Pour ceci, on a écrit une méthode booléenne appelée admin?
dans
ApplicationController
. Si admin?
retourne true
alors les liens sont visibles,
sinon ils sont cachés. Nous avons laissé la méthode retourner false
; ce dont on a besoin c'est de finir
d'écrire la méthode et fournir aux administrateurs un moyen de se connecter au site.
Il y a plus d'une façon de le faire
Il y a beaucoup de façons différentes d'implémenter un système de connexion. Nous pourrions implémenter un enregistrement complet d'utilisateur avec un modèle User
, une page d'inscription et ainsi de suite. Si nous étions partis pour adopter cette approche, il existe un excellent plugin appelé restful_authentication
, qui est une version améliorée de acts_as_authenticated
, disponible au téléchargement.1 Une fois installé, le modèle User
et un contrôleur Sessions
peuvent être généré comme ceci :
$script/plugin install git://github.com/technoweenie/restful-authentication.git restful_authentication $script/generate authenticated User sessions $rake db:migrate
Nous n'allons pas utiliser Restful Authentication ici. Le plugin restful_authentication
sera abordé plus en détail dans l'épisode 67.
Notre site est si simple qu'un système complet n'est pas nécessaire. Nous avons seulement besoin de gérer les épisodes du site, donc nous allons adopter une approche plus directe qui ne nécessite pas de modèle User
ou de plugins. Si nous voulions prendre une approche vraiment simple nous pourrions restreindre l'accès grâce à l'adresse IP et écrire notre méthode admin?
comme ceci.
def admin request.remote_ip == "127.0.0.1" end
Ceci est plus limité puisque ça implique que votre connexion internet a une adresse IP fixe et que vous voudrez toujours administrer votre site depuis le même endroit. À la place de ceci, nous alloons construire une page de connexion simple qui ne requiert qu'un mot de passe. Si le mot de passe saisi est correct alors l'utilisateur verra les liens d'administration.
Notre page de connexion basique.
Pour faire ça, nous allons générer un contrôleur Sessions
. Le code du contrôleur est le suivant :
class SessionsController < ApplicationController def new end def create session[:password] = params[:password] flash[:notice] = ’Successfully logged in’ redirect_to home_path end def destroy reset_session flash[:notice] = ’Successfully logged out’ redirect_to login_path end end
Il y a aussi une nouvelle vue dans le dossier /views/sessions
.
<% form_tag sessions_path do %> Password: <%= password_field_tag :password %> <%= submit_tag "Login" %> <% end %>
Le formulaire est soumis à l'action create
qui enregistre le mot de passe dans la session puis redirige vers la page d'accueil. Dans notre méthode admin?
nous contrôlons que le mot de passe en session est correct et on retourne true
le cas échéant.
def admin? session[:password] == "secret" end
The end.
Notre page de connexion est maintenant complète. Bien que pas particulièrement sophistiquée comparée à un système de gestion d'utilisateur comme celui fourni par Restful Authentication, c'est un moyen suffisant pour un site simple.
Finalement, au cas où vous vous demanderiez comment on a donné l'url /login
à notre page de connexion, ça se passe dans routes.rb
map.connect ’login’, :controller => ’sessions’, :action => ’create’ map.connect ’logout’, :controller => ’sessions’, :action => ’destroy’