Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails和BCrypt有问题,密码是\u安全的\u_Ruby On Rails_Ajax_Activerecord_Controller_Bcrypt - Fatal编程技术网

Ruby on rails Rails和BCrypt有问题,密码是\u安全的\u

Ruby on rails Rails和BCrypt有问题,密码是\u安全的\u,ruby-on-rails,ajax,activerecord,controller,bcrypt,Ruby On Rails,Ajax,Activerecord,Controller,Bcrypt,我对Rails还很陌生,所以我可能错过了一些明显的东西,但我很难让bcrypt的拥有安全的密码 我试图通过来自React前端的axios AJAX调用注册用户。数据正在正确地传递,我没有任何CORS问题,因为当我删除has\u secure\u password行(并在所有适用的位置将:password替换为:password\u digest)时,用户被输入数据库——只是没有加密密码。我已经整理了之前关于“密码是否安全”的一系列问题和答案,似乎什么都不起作用 以下是我尝试创建新用户时服务器发出

我对Rails还很陌生,所以我可能错过了一些明显的东西,但我很难让bcrypt的
拥有安全的密码

我试图通过来自React前端的axios AJAX调用注册用户。数据正在正确地传递,我没有任何CORS问题,因为当我删除
has\u secure\u password
行(并在所有适用的位置将
:password
替换为
:password\u digest
)时,用户被输入数据库——只是没有加密密码。我已经整理了之前关于“密码是否安全”的一系列问题和答案,似乎什么都不起作用

以下是我尝试创建新用户时服务器发出的信息:

1| Started POST "/api/users" for 127.0.0.1 at 2017-02-19 20:51:19 -0500
2| Processing by Api::UsersController#create as HTML
3|   Parameters: {"name"=>"test", "username"=>"test25", "email"=>"test@test.com", "password"=>"[FILTERED]", "user"=>{"name"=>"test", "username"=>"test25", "email"=>"test@test.com"}}
4|    (0.1ms)  BEGIN
5|    (0.1ms)  ROLLBACK
6| Completed 200 OK in 11ms (Views: 0.3ms | ActiveRecord: 4.2ms) 
(尽管最后一行很乐观,但用户没有进入数据库。另外,请注意第3行后半部分缺少的
密码
信息。)

以下是我的用户模型:

class User < ApplicationRecord
  has_secure_password
end
AJAX调用将密码作为
password:[password here]
发送,我的表中有一个
:password\u digest
列。如果您能帮助诊断错误,我们将不胜感激

谢谢你的阅读

编辑以添加


在ruby控制台中创建用户工作正常。我不喜欢这个解决方案,但最终还是奏效了:

添加不带
user_参数的用户
定义的用户有效

class UsersController < ApplicationController
    def index
    end

    def create
      user = User.new({name: params[:name], username: params[:username], password: params[:password], email: params[:email]})
      if user.save
        render json: { user: user }
      else
        render json: {error: user.errors.full_messages}
      end
    end

  end
实际上,我发送的对象应该是

axios.post('/users', {
    user: {
        name: e.target.name.value,
        password: e.target.password.value,
        other_option: e.target.option.value
     }, 
  }).then((res) => { /* do some stuff */ })
   .catch((err) => console.log(err));
。。。从……开始

def user_params
  params.require(:user).permit(:name, :username, :other_option)
end

。。。它希望请求主体有一个对象
:user

尝试转到Rails控制台,并在那里创建一个新用户,user=user.create。当它失败时,键入user.errors.full_messages以查看失败的地方。@Dithanial在rails控制台中创建它实际上没有问题。仍然无法使用AJAX调用。我用
user.errors更新了控制器的错误响应。完整消息
而不是“有错误”,并得到“密码不能为空”。BCrypt需要密码确认吗?@TimmyVonHeiss据我所知,没有密码它也能工作,请参阅。。。我正在使用的示例也没有确认字段
axios.post('/users', {
    user: {
        name: e.target.name.value,
        password: e.target.password.value,
        other_option: e.target.option.value
     }, 
  }).then((res) => { /* do some stuff */ })
   .catch((err) => console.log(err));
def user_params
  params.require(:user).permit(:name, :username, :other_option)
end