Rails 请问下关于 Grape 的 login 的 POST 方法。。。。

jjzxcc · May 14, 2013 · 4050 hits

controller 里的方法为

def create
    @user = User.find_by_email(params[:session][:email].downcase)
    if @user && @user[:locked]
      redirect_to new_session_path
    elsif @user && !@user[:locked] && @user.authenticate(params[:session][:password]) 
      sign_in @user
      redirect_back_or  current_users_path
    else
      redirect_to new_session_url
    end
  end

grape 的 api 方法为

post 'login' do
    @user = User.find_by_email(params[:session][:email].downcase)
    if @user && @user[:locked]
      redirect '/users/login'
    elsif @user && !@user[:locked] && @user.authenticate(params[:session][:password]) 
      sign_in @user
      redirect  '/users/current'
    else
      redirect '/users/login'
    end
  end

grape 的 helper 方法有

def current_user
      @current_user ||= User.find_by_remember_token(cookies[:remember_token])
    end

    def current_user=(user)
      @current_user = user
    end

    def sign_in(user)
      if params[:remember_me]
        cookies.permanent[:remember_token] = user.remember_token
      else
        cookies[:remember_token] = user.remember_token
      end
      self.current_user = user
    end

现在遇到的问题是

post 'login' do
    @user = User.find_by_email(params[:session][:email].downcase)
    if @user && @user[:locked]
      redirect '/users/login'
    elsif @user && !@user[:locked] && @user.authenticate(params[:session][:password]) 
      sign_in @user
      redirect  '/users/current'
    else
      redirect '/users/login'
    end
  end

我在 sign_in @user这步打印出 current_user 是有值的,但是 redirect '/users/current'不成功,会应为 current_user 值为空而被重定位。求教原因。

No Reply at the moment.
You need to Sign in before reply, if you don't have an account, please Sign up first.