关于登录,我正在关注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)
你的'current_user'方法返回nil。你说“当我正在运行我的应用程序被记录...”时,你怎么确定你已经登录?因为看起来你不是。 – ByScripts
@ByScripts:你的意思是退出?那么...我已经清除了我的cookies和所有东西,并重新启动了浏览器,所以我想我是。有没有一种简单的方法来看到? – holyredbeard
我也想你把flash.now [:error] ='无效的电子邮件/密码组合'#不太正确!'不应该是flash [:error] =''无效的电子邮件/密码组合' – David