【发布时间】:2012-03-22 08:51:46
【问题描述】:
我正在尝试通过关注Ryan Bates's tutorial 在我的登录表单中添加记住我的功能。但是,当我尝试访问我的页面时,我收到此错误:
找不到
auth_token =的用户
我认为问题出在我的 application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery
helper_method :current_user
private
def current_user
@current_user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]
end
end
这是来自我的 user.rb 的代码
class User < ActiveRecord::Base
attr_accessible :username, :email, :password, :password_confirmation
has_secure_password
validates_presence_of :username
validates_uniqueness_of :username
validates_presence_of :email
validates_uniqueness_of :email
validates_confirmation_of :password
validates_presence_of :password, :on => :create
before_create { generate_token(:auth_token) }
def send_password_reset
generate_token(:password_reset_token)
self.password_reset_sent_at = Time.zone.now
save!
UserMailer.password_reset(self).deliver
end
def generate_token(column)
begin
self[column] = SecureRandom.urlsafe_base64
end while User.exists?(column => self[column])
end
end
这是我的 user_controller.rb
class UsersController < ApplicationController
def new
@user = User.new
end
def show
@user = User.find(params[:id])
end
def create
@user = User.new(params[:user])
if @user.save
redirect_to @user, :notice => "Signed up!"
else
render "new"
end
end
end
最后是我的 session_controller
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by_username(params[:username])
if user && user.authenticate(params[:password])
if params[:remember_me]
cookies.permanent[:auth_token] = user.auth_token
else
cookies[:auth_token] = user.auth_token
end
redirect_to root_url, :notice => "Logged in!"
else
flash.now.alert = "Invalid email or password"
render "new"
end
end
def destroy
cookies.delete(:auth_token)
redirect_to root_url, :notice => "Logged out!"
end
end
我唯一改变的是通过用户名而不是电子邮件来查找用户,但我不明白为什么会破坏它。有人有什么想法吗?
编辑
我的数据库由以下迁移填充
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :username
t.string :email
t.string :password_digest
t.timestamps
end
end
end
class AddAuthTokenToUsers < ActiveRecord::Migration
def change
add_column :users, :auth_token, :string
end
end
class AddPasswordResetToUsers < ActiveRecord::Migration
def change
add_column :users, :password_reset_token, :string
add_column :users, :password_reset_sent_at, :datetime
end
end
end
这是根据终端窗口的错误:
ActionView::Template::Error (Couldn't find User with auth_token = ):
1: <h1>Home</h1>
2:
3: <div id="user_nav">
4: <% if current_user %>
5: Logged in as <%= current_user.email %>
6: <%= link_to "Log out", logout_path %>
7: <% else %>
app/controllers/application_controller.rb:8:in `current_user'
app/views/pages/home.html.erb:4:in `_app_views_pages_home_html_erb___725535246_2189699680'
编辑 2
这是 home.html.erb 文件的代码
<h1>Home</h1>
<div id="user_nav">
<% if current_user %>
Logged in as <%= current_user.email %>
<%= link_to "Log out", logout_path %>
<% else %>
<%= link_to "Sign up", signup_path %> or
<%= link_to "Log in", login_path %>
<% end %>
</div>
【问题讨论】:
-
您可以将错误消息添加到您的帖子中吗?
-
请用sql描述表,例如: sql> 描述用户;
-
顺便说一句,您可以通过
rails db进入正在使用的任何数据库的 sql 提示符 - 非常棒! -
您的编辑很有帮助。 app/views/pages/home.html.erb 中可能会出现错误。你能发布那个代码吗?
-
感谢 Perry 和 Michael,添加了 home.html.erb 文件内容
标签: ruby-on-rails authentication remember-me