0

关于登录,我正在关注this tutorial。我现在跳过了注册章节,所以我对用户进行了硬编码。我非常小心地遵循它(现在大约四次),但是我仍然遇到了会话问题,特别是current_user。current_user(session_helper.rb)的问题

session_helper:

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 

session_controller:

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+\-.][email protected][a-z\d\-.]+\.[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 

..i.e删除 “!”登录/注册工作以及显示正确的链接。但是这也意味着我不能使用current_user,因为它实际上是“零”。

所以问题是为什么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) 
+0

你的'current_user'方法返回nil。你说“当我正在运行我的应用程序被记录...”时,你怎么确定你已经登录?因为看起来你不是。 – ByScripts

+0

@ByScripts:你的意思是退出?那么...我已经清除了我的cookies和所有东西,并重新启动了浏览器,所以我想我是。有没有一种简单的方法来看到? – holyredbeard

+0

我也想你把flash.now [:error] ='无效的电子邮件/密码组合'#不太正确!'不应该是flash [:error] =''无效的电子邮件/密码组合' – David

回答

0

的问题终于解决了,那就是通过删除数据库中的所有的(测试)的用户,并创建新的(种子)来完成。

用户是在将更改应用到应用程序以及db模型之前创建的,并且可能导致此问题。

相关问题