首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bcrypt-ruby的问题

bcrypt-ruby的问题
EN

Stack Overflow用户
提问于 2013-11-26 10:41:18
回答 1查看 254关注 0票数 0

我是rails的新手,正在尝试编写一个应用程序的一部分,该应用程序处理所有令人讨厌的帐户信息,我可以在未来的所有应用程序中使用(我找不到一个样板来为我做这件事)。

不管怎么说。我已经安装了bcrypt,正在尝试注册一个新用户。我在routes.rb中创建了一个用于注册的路由。我还将安装的bcrypt-ruby gem添加到了我的Gemfile中。我从bcrypt-ruby.rubyforge.org复制了源代码,我的代码如下所示。

代码语言:javascript
复制
class RegisterController < ApplicationController
    def create
        @user = User.new(params[:user])
        @user.password = params[:password]
        @user.save!
    end
end 

我的用户模型是这样的。

代码语言:javascript
复制
require 'bcrypt'

class User < ActiveRecord::Base
    # users.password_hash in the database is a :string
    include BCrypt

    def password
        @password ||= Password.new(password_hash)
    end

    def password=(new_password)
        @password = Password.create(new_password)
        self.password_hash = @password
    end
end

我做了很多不同的事情来确定问题是什么。当我向寄存器控制器提交一些东西时,我得到的错误是

代码语言:javascript
复制
NoMethodError (undefined method `stringify_keys' for "a":String): app/controllers/register_controller.rb:3:in `create'

所以这是我的问题。什么是def password=(new_password),这种语法对我来说是陌生的。什么是||=。这种语法对我来说也是陌生的。为什么我会得到这个错误?有没有rails的样板,我可以用来省去这个麻烦,然后我就可以开始编码了?

干杯,谢谢!

编辑:添加视图代码

代码语言:javascript
复制
<%= form_tag("/register#create", method: "post") do %>
 <p><%= text_field_tag(:user) %></p>
 <p><%= text_field_tag(:password) %></p>
 <p> <%= submit_tag("Register") %></p>
<% end %>
EN

回答 1

Stack Overflow用户

发布于 2013-11-26 10:50:18

  1. def password=(new_password)

在Ruby语言中,你通常认为是运算符的所有东西(+-=等)都被实现为方法,你也可以对自己的方法做同样的事情。这就是为什么:只是password=的一个方法。这意味着当其他代码调用user.password =时,它实际上是在调用此方法。

  1. ||=

这实际上是说“返回这个用户实例的密码,但如果它不存在,请先创建一个”。如果user.password在那里,它就会返回它;否则,它会创建一个新的Password并返回它。

  1. 我不确定为什么你会得到这个错误,但我猜params[:user]不是它应该是的样子。(它是一个字符串,而不是散列吗?)错误是抱怨它不能处理你的参数,所以看看params[:user]是什么。它应该看起来像这样:{ password: 'password' }

当然是

  1. ,你没有理由去实现它。Devise是一个广泛使用的身份验证gem,它将为您完成所有这些(以及更多,更多)工作。您也可以使用ActiveRecord的has_secure_password功能,该功能也使用BCrypt,但这也需要一些设置工作,而且比Devise的灵活性差得多。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20207535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档