Commit 28460adbef237e785a512c68f602050213b4bfd8
1 parent
a067af01
Exists in
master
and in
9 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 | before_filter :detect_stuff_by_domain |
| 8 | 8 | before_filter :init_noosfero_plugins |
| 9 | 9 | before_filter :allow_cross_domain_access |
| 10 | + | |
| 11 | + before_filter :login_from_cookie | |
| 10 | 12 | before_filter :login_required, :if => :private_environment? |
| 13 | + | |
| 11 | 14 | before_filter :verify_members_whitelist, :if => [:private_environment?, :user] |
| 12 | 15 | before_filter :redirect_to_current_user |
| 13 | 16 | ... | ... |
app/controllers/public/account_controller.rb
| ... | ... | @@ -50,10 +50,12 @@ class AccountController < ApplicationController |
| 50 | 50 | |
| 51 | 51 | if logged_in? |
| 52 | 52 | check_join_in_community(self.current_user) |
| 53 | + | |
| 53 | 54 | if params[:remember_me] == "1" |
| 54 | 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 | 57 | end |
| 58 | + | |
| 57 | 59 | if redirect? |
| 58 | 60 | go_to_initial_page |
| 59 | 61 | session[:notice] = _("Logged in successfully") | ... | ... |
app/models/user.rb
| ... | ... | @@ -249,8 +249,9 @@ class User < ActiveRecord::Base |
| 249 | 249 | |
| 250 | 250 | # These create and unset the fields required for remembering users between browser closes |
| 251 | 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 | 255 | save(:validate => false) |
| 255 | 256 | end |
| 256 | 257 | ... | ... |
app/views/account/login.html.erb
| ... | ... | @@ -13,7 +13,14 @@ |
| 13 | 13 | |
| 14 | 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 | 25 | <% button_bar do %> |
| 19 | 26 | <%= submit_button( 'login', _('Log in') )%> | ... | ... |
lib/authenticated_system.rb
| ... | ... | @@ -138,14 +138,9 @@ module AuthenticatedSystem |
| 138 | 138 | # When called with before_filter :login_from_cookie will check for an :auth_token |
| 139 | 139 | # cookie and log the user back in if apropriate |
| 140 | 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 | 144 | end |
| 150 | 145 | |
| 151 | 146 | private | ... | ... |
po/pt/noosfero.po
| ... | ... | @@ -8345,6 +8345,10 @@ msgstr "Continuar" |
| 8345 | 8345 | msgid "Log in" |
| 8346 | 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 | 8352 | #: app/views/account/login.html.erb:33 |
| 8349 | 8353 | #: app/views/account/login_block.html.erb:31 |
| 8350 | 8354 | msgid "I forgot my password!" | ... | ... |
test/functional/account_controller_test.rb
| ... | ... | @@ -129,15 +129,14 @@ class AccountControllerTest < ActionController::TestCase |
| 129 | 129 | assert_nil @response.cookies["auth_token"] |
| 130 | 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 | 140 | users(:johndoe).remember_me |
| 142 | 141 | users(:johndoe).update_attribute :remember_token_expires_at, 5.minutes.ago |
| 143 | 142 | @request.cookies["auth_token"] = cookie_for(:johndoe) |
| ... | ... | @@ -145,7 +144,7 @@ class AccountControllerTest < ActionController::TestCase |
| 145 | 144 | assert !@controller.send(:logged_in?) |
| 146 | 145 | end |
| 147 | 146 | |
| 148 | - def test_should_fail_cookie_login | |
| 147 | + should 'fail cookie login' do | |
| 149 | 148 | users(:johndoe).remember_me |
| 150 | 149 | @request.cookies["auth_token"] = auth_token('invalid_auth_token') |
| 151 | 150 | get :index | ... | ... |