accounts_controller.rb
上传用户:netsea168
上传日期:2022-07-22
资源大小:4652k
文件大小:3k
源码类别:

Ajax

开发平台:

Others

  1. class AccountsController < ApplicationController
  2.   before_filter :verify_config
  3.   before_filter :verify_users, :only => [:login, :recover_password]
  4.   filter_parameter_logging "password"
  5.   def login 
  6.     if session[:user_id] && session[:user_id] == self.current_user.id
  7.       redirect_back_or_default :controller => "admin/dashboard", :action => "index"
  8.       return
  9.     end
  10.       
  11.     @page_title = "#{this_blog.blog_name} - #{_('login')}"
  12.     case request.method
  13.       when :post
  14.       self.current_user = User.authenticate(params[:user][:login], params[:user][:password])
  15.             
  16.       if logged_in?
  17.         session[:user_id] = self.current_user.id
  18.         if params[:remember_me] == "1"
  19.           self.current_user.remember_me unless self.current_user.remember_token?
  20.           cookies[:auth_token] = {
  21.             :value => self.current_user.remember_token,
  22.             :expires => self.current_user.remember_token_expires_at,
  23.             :http_only => true # Help prevent auth_token theft.
  24.           }
  25.         end
  26.         add_to_cookies(:typo_user_profile, self.current_user.profile.label, '/')
  27.         self.current_user.update_connection_time
  28.         flash[:notice]  = _("Login successful")
  29.         redirect_back_or_default :controller => "admin/dashboard", :action => "index"
  30.       else
  31.         flash.now[:error]  = _("Login unsuccessful")
  32.         @login = params[:user][:login]
  33.       end
  34.     end
  35.   end
  36.   
  37.   def signup
  38.     @page_title = "#{this_blog.blog_name} - #{_('signup')}"
  39.     unless User.count.zero? or this_blog.allow_signup == 1
  40.       redirect_to :action => 'login'
  41.       return
  42.     end
  43.     @user = User.new(params[:user])
  44.     if request.post? 
  45.       @user.password = generate_password
  46.       session[:tmppass] = @user.password
  47.       @user.name = @user.login
  48.       if @user.save
  49.         self.current_user = @user
  50.         session[:user_id] = @user.id
  51.       
  52.         redirect_to :controller => "accounts", :action => "confirm"
  53.         return
  54.       end
  55.     end
  56.   end
  57.   
  58.   def recover_password
  59.     @page_title = "#{this_blog.blog_name} - #{_('Recover your password')}"
  60.     if request.post?
  61.       @user = User.find(:first, :conditions => ["login = ? or email = ?", params[:user][:login], params[:user][:login]])
  62.       
  63.       if @user
  64.         @user.password = generate_password
  65.         @user.save
  66.         flash[:notice] = _("An email has been successfully sent to your address with your new password")
  67.         redirect_to :action => 'login'
  68.       else
  69.         flash[:error] = _("Oops, something wrong just happened")
  70.       end
  71.     end
  72.   end
  73.   def logout
  74.     flash[:notice]  = _("Successfully logged out")
  75.     self.current_user.forget_me
  76.     self.current_user = nil
  77.     session[:user_id] = nil
  78.     cookies.delete :auth_token
  79.     cookies.delete :typo_user_profile
  80.     redirect_to :action => 'login'
  81.   end
  82.   private
  83.   def generate_password
  84.     chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a
  85.     newpass = ""
  86.     1.upto(7) { |i| newpass << chars[rand(chars.size-1)] }
  87.     return newpass
  88.   end
  89.   def verify_users
  90.     redirect_to(:controller => "accounts", :action => "signup") if User.count == 0
  91.     true
  92.   end
  93.   
  94.   def verify_config
  95.     redirect_to :controller => "setup", :action => "index" if  ! this_blog.configured?
  96.   end
  97. end