ruby on rails - Problems with current_user (session_helper.r



我正在学习关于登录的教程。我暂时跳过了注册章节,所以我对用户进行硬编码。我已经非常小心地遵循了它(现在大约四次),但我仍然在会话中遇到问题,尤其是current_user。

会话助手:

module SessionsHelper
  def sign_in(user)
    cookies.permanent[:remember_token] = user.remember_token
    self.current_user = user
  end
  def signed_in?
    !current_user.nil?
  end
  def current_user=(user)
    @current_user = user
  end
  def current_user
    @current_user ||= User.find_by_remember_token(cookies[:remember_token])
  end
  def sign_out
    self.current_user = nil
    cookies.delete(:remember_token)
  end
end

会话控制器:

class SessionsController < ApplicationController
  def new
  end
  def create
    user = User.find_by_email(params[:session][:email])
    if user && user.authenticate(params[:session][:password])
      sign_in user
      redirect_to user
    else
      flash.now[:error] = 'Invalid email/password combination' # Not quite right!
      render 'new'
    end
  end
  def destroy
    sign_out
    redirect_to root_url
  end
end

用户模型:

class User < ActiveRecord::Base
  attr_accessible :first_name, :last_name, :email, :password
  has_secure_password
  before_save :create_remember_token
  has_and_belongs_to_many :projects
  belongs_to :project
  belongs_to :ticket
  validates :first_name, presence: true, length: { maximum: 24 }
  validates :last_name, presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /A[w+-.]+@[a-zd-.]+.[a-z]+z/i
  validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }
  validates :password, presence: true, length: { minimum: 6 }
  private
    def create_remember_token
      self.remember_token = SecureRandom.urlsafe_base64
    end
end

示例:

<% if signed_in? %>
  <li><%= link_to "Create projekt", :controller => "projects", :action => "new" %>
<% end %>

当我运行我的应用程序时,它会显示我已登录(所有只应为登录用户显示的内容都会显示出来,反之亦然)。我尝试过清除cookie,重新启动浏览器,甚至尝试过其他浏览器,但都是一样的。

问题是,如果我(在sessions_helper.rb中)从:更改

def signed_in?
  !current_user.nil?
end

到。。。

def signed_in?
  current_user.nil?
end

即删除"!",登录/注销即可工作,并显示正确的链接。但这也意味着我不能使用current_user,因为它实际上是"nil"。

所以问题是为什么current_user为零?代码出了什么问题?

这是用户的数据库模型:

first_name       | varchar(25)
last_name        | varchar(50)
email            | varchar(255)
created_at       | datetime
updated_at       | datetime
password_digest  | varchar(255)
password         | varchar(255)
remember_token   | varchar(255)

问题最终得到了解决,删除了数据库中的所有(测试)用户并创建了新用户(带有种子)。

用户是在应用程序和数据库模型应用更改之前创建的,这可能导致了问题。

相关内容

  • 没有找到相关文章

最新更新