加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在轨道上的ruby中未定义的方法’authenticate

发布时间:2020-12-17 03:18:30 所属栏目:百科 来源:网络整理
导读:我是 Ruby on Rails应用程序的新手,我已经创建了CRUD但仍然堆叠在Login注销功能. 这是我的Sessions_controller: def newenddef create user = User.find_by(email: params[:session][:email].downcase) if user user.authenticate(params[:session][:passke
我是 Ruby on Rails应用程序的新手,我已经创建了CRUD但仍然堆叠在Login&注销功能.

这是我的Sessions_controller:

def new
end

def create
  user = User.find_by(email: params[:session][:email].downcase)
  if user && user.authenticate(params[:session][:passkey])
    # Log the user in and redirect to the user's show page.
  else
    # Create an error message.
  flash[:danger] = 'Invalid email/password combination' # Not quite right!
    render 'new'
  end
end

def destroy
end

这是我的观点:new.html.erb

<%= form_for(:session,url: login_path) do |f| %>

    <%= f.label :email %>
    <%= f.email_field :email,class: 'form-control' %>

    <%= f.label :passkey%>
    <%= f.password_field :passkey,class: 'form-control' %>

    <%= f.submit "Log in",class: "btn btn-primary" %>
<% end %>

这是我的模特:

class User< ActiveRecord::Base
  validates :first_name,:presence => true,:length => { :in => 3..20 }
  validates :last_name,:length => { :in => 3..20 }
  validates :email,:uniqueness => true,format: { with: /A[^@s]+@([^@.s]+.)+[^@.s]+z/ }
  validates :passkey,:confirmation => true,:length => {:in => 6..20}
end

当我单击“登录”按钮,然后显示此错误:

NoMethodError in SessionsController#create
undefined method `authenticate’ for #User:0x0000000d5c65e0>

我该如何解决这个错误?

我正在使用ruby 1.9.7 Rails 4.2.5& mysql2

那对我很有帮助,拜托.

解决方法

只需添加

has_secure_password

到您的用户模型.确保添加

gem 'bcrypt-ruby'

到你的gemfile.

在用户模型中添加一个名为“password_digest”的字段,其中包含字符串.

而已. Rails会像魅力一样为你处理用户身份验证,你也可以在你的模型上使用#authenticate方法!

编辑:
你可以在github – Rails Project @ Github查看这个项目我已经使用Rails实现了身份验证. checkout user.rb,gemfile和user_controller.rb.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读