Permalink
Browse files

Modèle utilisateur avec mot de passe et page de profil

  • Loading branch information...
1 parent 0dc986b commit 996c76346b22647e364f560cffb815d6dc0a513a @lolo32 committed Apr 30, 2012
View
@@ -7,6 +7,7 @@ gem 'rails', '3.2.3'
gem 'sqlite3'
+gem 'gravatar_image_tag'
# Gems used only for assets and not required
# in production environments by default.
@@ -47,4 +48,5 @@ group :test do
gem 'webrat'
gem 'spork'
+ gem 'factory_girl_rails', '3.2.0'
end
View
@@ -40,22 +40,28 @@ GEM
coffee-script-source (1.3.1)
diff-lcs (1.1.3)
erubis (2.7.0)
- execjs (1.3.0)
+ execjs (1.3.1)
multi_json (~> 1.0)
+ factory_girl (3.2.0)
+ activesupport (>= 3.0.0)
+ factory_girl_rails (3.2.0)
+ factory_girl (~> 3.2.0)
+ railties (>= 3.0.0)
+ gravatar_image_tag (1.1.2)
hike (1.2.1)
i18n (0.6.0)
journey (1.0.3)
jquery-rails (2.0.2)
railties (>= 3.2.0, < 5.0)
thor (~> 0.14)
- json (1.6.6)
+ json (1.7.0)
libv8 (3.3.10.4)
mail (2.4.4)
i18n (>= 0.4.0)
mime-types (~> 1.16)
treetop (~> 1.4.8)
mime-types (1.18)
- multi_json (1.3.2)
+ multi_json (1.3.4)
nokogiri (1.5.2)
polyglot (0.3.3)
rack (1.4.1)
@@ -102,7 +108,7 @@ GEM
sass (>= 3.1.10)
tilt (~> 1.3)
spork (1.0.0rc2)
- sprockets (2.1.2)
+ sprockets (2.1.3)
hike (~> 1.2)
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
@@ -129,6 +135,8 @@ PLATFORMS
DEPENDENCIES
annotate (= 2.4.1.beta1)
coffee-rails (~> 3.2.1)
+ factory_girl_rails (= 3.2.0)
+ gravatar_image_tag
jquery-rails
rails (= 3.2.3)
rspec
@@ -114,3 +114,27 @@ footer {
footer nav {
float: none;
}
+
+/* User show page */
+
+table.profile {
+ width: 100%;
+ margin-bottom: 0;
+}
+
+td.main {
+ width: 70%;
+ padding: 1em;
+}
+
+td.sidebar {
+ width: 30%;
+ padding: 1em;
+ vertical-align: top;
+ background: #ffc;
+}
+
+.profile img.gravatar {
+ border: 1px solid #999;
+ margin-bottom: -15px;
+}
@@ -4,6 +4,7 @@ def new
end
def show
- @user = Utilisateur.find( params[:id] )
+ @utilisateur = Utilisateur.find( params[:id] )
+ @titre = @utilisateur.nom
end
end
@@ -1,2 +1,11 @@
module UtilisateursHelper
+
+ # helper pour afficher plus facilement les gravatars
+ def gravatar_for( user, options = { :size => 50 } )
+ gravatar_image_tag( user.courriel.downcase,
+ :alt => user.nom,
+ :class => 'gravatar',
+ :gravatar => options
+ )
+ end
end
View
@@ -1,23 +1,64 @@
class Utilisateur < ActiveRecord::Base
- attr_accessible :courriel, :nom
+ attr_accessor :mdp
+ attr_accessible :nom, :courriel, :mdp, :mdp_confirmation
courriel_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
- validates :nom, :presence => true,
- :length => { :maximum => 50 }
- validates :courriel, :presence => true,
- :format => { :with => courriel_regex },
- :uniqueness => { :case_sensitive => false }
+ validates :nom, :presence => true,
+ :length => { :maximum => 50 }
+ validates :courriel, :presence => true,
+ :format => { :with => courriel_regex },
+ :uniqueness => { :case_sensitive => false }
+ # Crée automatique l'attribut virtuel 'mdp_confirmation'.
+ validates :mdp, :presence => true,
+ :confirmation => true,
+ :length => { :within => 6..40 }
+
+ # Méthode appelée juste avant de sauvegarder
+ before_save :chiffre_mdp
+
+ # Retourne vrai si le mot de passe correspond
+ # Compare mdp_chiffre avec la version chiffre de mdp_soumis
+ def has_mdp?( mdp_soumis )
+ mdp_chiffre == chiffre( mdp_soumis )
+ end
+
+ def self.authentifie( courriel, mdp_saisis )
+ user = find_by_courriel( courriel )
+ return nil if user.nil?
+ return user if user.has_mdp?( mdp_saisis )
+ end
+
+ private
+
+ def chiffre_mdp
+ self.sel = gen_sel if new_record?
+ self.mdp_chiffre = chiffre( mdp )
+ end
+
+ def chiffre( string )
+ hash_securise( "#{sel}--#{string}" )
+ end
+
+ def gen_sel
+ hash_securise( "#{Time.now.utc}--#{mdp}" )
+ end
+
+ def hash_securise( string )
+ Digest::SHA2.hexdigest( string )
+ end
end
# == Schema Information
#
# Table name: utilisateurs
#
-# id :integer not null, primary key
-# nom :string(255)
-# courriel :string(255)
-# created_at :datetime not null
-# updated_at :datetime not null
+# id :integer not null, primary key
+# nom :string(255)
+# courriel :string(255)
+# created_at :datetime not null
+# updated_at :datetime not null
+# mdp_chiffre :string(255)
+# sel :string(255)
#
@@ -1 +1,14 @@
-<%= @user.nom %>, <%= @user.courriel %>
+<table class="profile" summary="Information sur le profil">
+ <tr>
+ <td class="main">
+ <h1>
+ <%= gravatar_for @utilisateur %>
+ <%= @utilisateur.nom %>
+ </h1>
+ </td>
+ <td class="sidebar round">
+ <strong>Nom</strong> <%= @utilisateur.nom %><br />
+ <strong>URL</strong> <%= link_to utilisateur_path( @utilisateur), @utilisateur %>
+ </td>
+ </tr>
+</table>
View
@@ -68,10 +68,16 @@
end
#== Route Map
-# Generated on 25 Apr 2012 12:37
+# Generated on 30 Apr 2012 15:19
#
-# signup /signup(.:format) utilisateurs#new
-# contact /contact(.:format) pages#contact
-# about /about(.:format) pages#about
-# help /help(.:format) pages#help
-# root / pages#home
+# POST /utilisateurs(.:format) utilisateurs#create
+# new_utilisateur GET /utilisateurs/new(.:format) utilisateurs#new
+# edit_utilisateur GET /utilisateurs/:id/edit(.:format) utilisateurs#edit
+# utilisateur GET /utilisateurs/:id(.:format) utilisateurs#show
+# PUT /utilisateurs/:id(.:format) utilisateurs#update
+# DELETE /utilisateurs/:id(.:format) utilisateurs#destroy
+# signup /signup(.:format) utilisateurs#new
+# contact /contact(.:format) pages#contact
+# about /about(.:format) pages#about
+# help /help(.:format) pages#help
+# root / pages#home
@@ -1,9 +1,5 @@
class AddCourrielUniquenessIndex < ActiveRecord::Migration
- def up
+ def change
add_index :utilisateurs, :courriel, :unique => true
end
-
- def down
- remove_index :utilisateurs, :courriel
- end
end
@@ -0,0 +1,5 @@
+class AddMdpToUtilisateurs < ActiveRecord::Migration
+ def change
+ add_column :utilisateurs, :mdp_chiffre, :string
+ end
+end
@@ -0,0 +1,5 @@
+class AddSelToUtilisateurs < ActiveRecord::Migration
+ def change
+ add_column :utilisateurs, :sel, :string
+ end
+end
View
@@ -11,13 +11,15 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 20120426083604) do
+ActiveRecord::Schema.define(:version => 20120427105233) do
create_table "utilisateurs", :force => true do |t|
t.string "nom"
t.string "courriel"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.string "mdp_chiffre"
+ t.string "sel"
end
add_index "utilisateurs", ["courriel"], :name => "index_utilisateurs_on_courriel", :unique => true
@@ -4,6 +4,38 @@
describe UtilisateursController do
render_views
+ describe "GET 'show'" do
+ before(:each) do
+ @utilisateur = FactoryGirl.create(:utilisateur)
+ end
+
+ it "devrait réussir" do
+ get :show, :id => @utilisateur
+ response.should be_success
+ end
+
+ it "devrait trouver le bon utilisateur" do
+ get :show, :id => @utilisateur
+ assigns(:utilisateur).should eq(@utilisateur)
+ end
+
+ it 'devrait avoir le bon titre' do
+ get :show, :id => @utilisateur
+ response.should have_selector("title", :content => @utilisateur.nom)
+ end
+
+ it 'devrait inclure le nom de l\'utilisateur' do
+ get :show, :id => @utilisateur
+ response.should have_selector("h1", :content => @utilisateur.nom)
+ end
+
+ it "devrait avoir une image de profil" do
+ get :show, :id => @utilisateur
+ response.should have_selector("h1>img", :class => "gravatar")
+ end
+
+ end
+
describe "GET 'new'" do
it "devrait exister" do
get 'new'
View
@@ -0,0 +1,10 @@
+# En utilisant le symbole ':utilisateur', nous faisons que
+# Factory Girl simule un modèle User.
+FactoryGirl.define do
+ factory :utilisateur do
+ nom "Michael Hartl"
+ courriel "mhartl@example.com"
+ mdp "foobar"
+ mdp_confirmation "foobar"
+ end
+end
Oops, something went wrong.

0 comments on commit 996c763

Please sign in to comment.