Commit 28460adbef237e785a512c68f602050213b4bfd8
1 parent
a067af01
Exists in
master
and in
29 other branches
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
Showing
7 changed files
with
33 additions
and
22 deletions
Show diff stats
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 "Continuar" | @@ -8345,6 +8345,10 @@ msgstr "Continuar" | ||
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 < ActionController::TestCase | @@ -129,15 +129,14 @@ class AccountControllerTest < 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 < ActionController::TestCase | @@ -145,7 +144,7 @@ class AccountControllerTest < 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 |