Chương này đang thêm các thẻ ghi nhớ để đảm bảo trạng thái đăng nhập của người dùng được ghi nhớ và phiên đó chỉ bị xóa khi người dùng đăng xuất rõ ràng. Tôi hiểu tầm quan trọng của việc có tính năng này trong ứng dụng của tôi, vì vậy, hãy đảm bảo rằng nó hoạt động chính xác. Tôi nhận được một loạt các sai sót tuy nhiên, khi tôi chạyChương 8 Rails Hướng dẫn Ghi nhớ lỗi Token
$ bundle exec rspec spec/
và tôi nghi ngờ họ phải làm với mô hình của tôi sử dụng, vì họ tất cả ngoại trừ một chứa:
NoMethodError:
undefined method `remember_token=' for #<User:...>
và chứa cuối cùng
Failure/Error: it { should respond_to(:remember_token) }
rồi trỏ chuột vào user_spec.rb, user.rb, và và các tập tin authentication_pages_spec.rb của tôi, mà tôi đã bao gồm hầu hết (những phần thích hợp) ở đây.
user.rb:
# == Schema Information
#
# Table name: users
#
# id :integer not null, primary key
# name :string(255)
# email :string(255)
# created_at :datetime not null
# updated_at :datetime not null
#
class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation
has_secure_password
before_save { |user| user.email = email.downcase }
before_save :create_remember_token
validates :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 },
uniqueness: { case_sensitive: false }
validates :password, length: { minimum: 6 }
validates :password_confirmation, presence: true
private
def create_remember_token
self.remember_token = SecureRandom.urlsafe_base64
end
end
authentication_pages_spec.rb:
require 'spec_helper'
describe "Authentication" do
subject {page}
describe "signin page" do
before { visit signin_path }
it {should have_selector('h1', text: 'Sign in')}
it {should have_selector('title', text: 'Sign in')}
end
describe "signin" do
before {visit signin_path}
describe "with invalid information" do
before {click_button "Sign in"}
it {should have_selector('title', text: 'Sign in')}
it {should have_selector('div.alert.alert-error', text: 'Invalid')}
describe "after visiting another page" do
before { click_link "Home" }
it { should_not have_selector('div.alert.alert-error') }
end
end
describe "with valid information" do
let(:user) { FactoryGirl.create(:user) }
before do
fill_in "Email", with: user.email
fill_in "Password", with: user.password
click_button "Sign in"
end
it { should have_selector('title', text: user.name) }
it { should have_link('Profile', href: user_path(user)) }
it { should have_link('Sign out', href: signout_path) }
it { should_not have_link('Sign in', href: signin_path) }
end
end
end
và đầu user_spec.rb:
# == Schema Information
#
# Table name: users
#
# id :integer not null, primary key
# name :string(255)
# email :string(255)
# created_at :datetime not null
# updated_at :datetime not null
#
require 'spec_helper'
describe User do
before do
@user = User.new(name: "Example User", email: "[email protected]",
password: "foobar", password_confirmation: "foobar")
end
subject { @user }
it { should respond_to(:name) }
it { should respond_to(:email) }
it { should be_valid }
it { should respond_to(:password_digest) }
it { should respond_to(:password) }
it { should respond_to(:password_confirmation) }
it { should respond_to(:authenticate) }
it { should respond_to(:remember_token) }
describe "remember token" do
before { @user.save }
its(:remember_token) { should_not be_blank }
end
.
.
.
Bất kỳ trợ giúp sẽ được nhiều đánh giá cao!
Điều này đã khắc phục được sự cố của tôi vì nó chỉ có trên Heroku. Tôi đã cố gắng kiểm tra đăng ký trước khi di chuyển. Sau đó, ngay cả 'heroku chạy db: migrate' sẽ không khắc phục được sự cố. Như thường lệ, tôi nên thử tắt và bật lại. – brodney