Commit 28460adbef237e785a512c68f602050213b4bfd8

Authored by Braulio Bhavamitra
1 parent a067af01

remember-me: make this feature default

that's usually the default behaviour nowadays so that users don't need to relogin
after a browser restart
app/controllers/application_controller.rb
@@ -7,7 +7,10 @@ class ApplicationController < ActionController::Base @@ -7,7 +7,10 @@ class ApplicationController < ActionController::Base
7 before_filter :detect_stuff_by_domain 7 before_filter :detect_stuff_by_domain
8 before_filter :init_noosfero_plugins 8 before_filter :init_noosfero_plugins
9 before_filter :allow_cross_domain_access 9 before_filter :allow_cross_domain_access
  10 +
  11 + before_filter :login_from_cookie
10 before_filter :login_required, :if => :private_environment? 12 before_filter :login_required, :if => :private_environment?
  13 +
11 before_filter :verify_members_whitelist, :if => [:private_environment?, :user] 14 before_filter :verify_members_whitelist, :if => [:private_environment?, :user]
12 before_filter :redirect_to_current_user 15 before_filter :redirect_to_current_user
13 16
app/controllers/public/account_controller.rb
@@ -50,10 +50,12 @@ class AccountController < ApplicationController @@ -50,10 +50,12 @@ class AccountController < ApplicationController
50 50
51 if logged_in? 51 if logged_in?
52 check_join_in_community(self.current_user) 52 check_join_in_community(self.current_user)
  53 +
53 if params[:remember_me] == "1" 54 if params[:remember_me] == "1"
54 self.current_user.remember_me 55 self.current_user.remember_me
55 - cookies[:auth_token] = { :value => self.current_user.remember_token , :expires => self.current_user.remember_token_expires_at } 56 + cookies[:auth_token] = {value: self.current_user.remember_token, expires: self.current_user.remember_token_expires_at}
56 end 57 end
  58 +
57 if redirect? 59 if redirect?
58 go_to_initial_page 60 go_to_initial_page
59 session[:notice] = _("Logged in successfully") 61 session[:notice] = _("Logged in successfully")
app/models/user.rb
@@ -249,8 +249,9 @@ class User < ActiveRecord::Base @@ -249,8 +249,9 @@ class User < ActiveRecord::Base
249 249
250 # These create and unset the fields required for remembering users between browser closes 250 # These create and unset the fields required for remembering users between browser closes
251 def remember_me 251 def remember_me
252 - self.remember_token_expires_at = 2.weeks.from_now.utc  
253 - self.remember_token = encrypt("#{email}--#{remember_token_expires_at}") 252 + self.remember_token_expires_at = 1.months.from_now.utc
  253 + # if the user's email/password changes this won't be valid anymore
  254 + self.remember_token = encrypt "#{email}-#{self.crypted_password}-#{remember_token_expires_at}"
254 save(:validate => false) 255 save(:validate => false)
255 end 256 end
256 257
app/views/account/login.html.erb
@@ -13,7 +13,14 @@ @@ -13,7 +13,14 @@
13 13
14 <%= f.password_field :password %> 14 <%= f.password_field :password %>
15 15
16 - <%= @plugins.dispatch(:login_extra_contents).collect { |content| instance_eval(&content) }.join("") %> 16 + <div class='checkbox'>
  17 + <label>
  18 + <%= check_box_tag :remember_me, '1', true %>
  19 + <%= _'Keep me logged in' %>
  20 + </label>
  21 + </div>
  22 +
  23 + <%= @plugins.dispatch(:login_extra_contents).collect { |content| instance_exec(&content) }.join("") %>
17 24
18 <% button_bar do %> 25 <% button_bar do %>
19 <%= submit_button( 'login', _('Log in') )%> 26 <%= submit_button( 'login', _('Log in') )%>
lib/authenticated_system.rb
@@ -138,14 +138,9 @@ module AuthenticatedSystem @@ -138,14 +138,9 @@ module AuthenticatedSystem
138 # When called with before_filter :login_from_cookie will check for an :auth_token 138 # When called with before_filter :login_from_cookie will check for an :auth_token
139 # cookie and log the user back in if apropriate 139 # cookie and log the user back in if apropriate
140 def login_from_cookie 140 def login_from_cookie
141 - return unless cookies[:auth_token] && !logged_in?  
142 - user = User.find_by_remember_token(cookies[:auth_token])  
143 - if user && user.remember_token?  
144 - user.remember_me  
145 - self.current_user = user  
146 - cookies[:auth_token] = { :value => self.current_user.remember_token , :expires => self.current_user.remember_token_expires_at }  
147 - flash[:notice] = "Logged in successfully"  
148 - end 141 + return if cookies[:auth_token].blank? or logged_in?
  142 + user = User.where(remember_token: cookies[:auth_token]).first
  143 + self.current_user = user if user and user.remember_token?
149 end 144 end
150 145
151 private 146 private
po/pt/noosfero.po
@@ -8345,6 +8345,10 @@ msgstr &quot;Continuar&quot; @@ -8345,6 +8345,10 @@ msgstr &quot;Continuar&quot;
8345 msgid "Log in" 8345 msgid "Log in"
8346 msgstr "Entrar" 8346 msgstr "Entrar"
8347 8347
  8348 +#: app/views/account/login.html.erb:19
  8349 +msgid "Keep me logged in"
  8350 +msgstr "Mantenha-me logado"
  8351 +
8348 #: app/views/account/login.html.erb:33 8352 #: app/views/account/login.html.erb:33
8349 #: app/views/account/login_block.html.erb:31 8353 #: app/views/account/login_block.html.erb:31
8350 msgid "I forgot my password!" 8354 msgid "I forgot my password!"
test/functional/account_controller_test.rb
@@ -129,15 +129,14 @@ class AccountControllerTest &lt; ActionController::TestCase @@ -129,15 +129,14 @@ class AccountControllerTest &lt; ActionController::TestCase
129 assert_nil @response.cookies["auth_token"] 129 assert_nil @response.cookies["auth_token"]
130 end 130 end
131 131
132 - # "remember_me" feature is disabled; uncommend this if it is enabled again.  
133 - # def test_should_login_with_cookie  
134 - # users(:johndoe).remember_me  
135 - # @request.cookies["auth_token"] = cookie_for(:johndoe)  
136 - # get :index  
137 - # assert @controller.send(:logged_in?)  
138 - # end  
139 -  
140 - def test_should_fail_expired_cookie_login 132 + should 'login with cookie' do
  133 + users(:johndoe).remember_me
  134 + @request.cookies["auth_token"] = cookie_for(:johndoe)
  135 + get :index
  136 + assert @controller.send(:logged_in?)
  137 + end
  138 +
  139 + should 'fail expired cookie login' do
141 users(:johndoe).remember_me 140 users(:johndoe).remember_me
142 users(:johndoe).update_attribute :remember_token_expires_at, 5.minutes.ago 141 users(:johndoe).update_attribute :remember_token_expires_at, 5.minutes.ago
143 @request.cookies["auth_token"] = cookie_for(:johndoe) 142 @request.cookies["auth_token"] = cookie_for(:johndoe)
@@ -145,7 +144,7 @@ class AccountControllerTest &lt; ActionController::TestCase @@ -145,7 +144,7 @@ class AccountControllerTest &lt; ActionController::TestCase
145 assert !@controller.send(:logged_in?) 144 assert !@controller.send(:logged_in?)
146 end 145 end
147 146
148 - def test_should_fail_cookie_login 147 + should 'fail cookie login' do
149 users(:johndoe).remember_me 148 users(:johndoe).remember_me
150 @request.cookies["auth_token"] = auth_token('invalid_auth_token') 149 @request.cookies["auth_token"] = auth_token('invalid_auth_token')
151 get :index 150 get :index