Php Laravel-我已经在视图中创建了新用户,但是当我尝试登录到他们的帐户时,“;“凭证不存在”;

Php Laravel-我已经在视图中创建了新用户,但是当我尝试登录到他们的帐户时,“;“凭证不存在”;,php,laravel,forms,Php,Laravel,Forms,我有点卡住了。。我是拉雷维尔的新手,所以请原谅我缺乏知识。在我的应用程序中,我有3种类型的用户。管理员、讲师和学生。首先,我在UsersTableSeeder中为这些角色创建了三个用户,并对他们的密码进行了哈希运算 在开发系统时,我创建了一个“创建用户表单”,管理员只能访问该表单。然而,当我尝试与通过此表单创建的用户登录时,显然他们的“凭据不存在”。我假设这可能与他们的密码没有以散列形式存储在数据库中有关?我知道这是一种不好的做法,但我不知道如何在视图/控制器中传递哈希密码。任何建议都将不胜感激

我有点卡住了。。我是拉雷维尔的新手,所以请原谅我缺乏知识。在我的应用程序中,我有3种类型的用户。管理员、讲师和学生。首先,我在UsersTableSeeder中为这些角色创建了三个用户,并对他们的密码进行了哈希运算

在开发系统时,我创建了一个“创建用户表单”,管理员只能访问该表单。然而,当我尝试与通过此表单创建的用户登录时,显然他们的“凭据不存在”。我假设这可能与他们的密码没有以散列形式存储在数据库中有关?我知道这是一种不好的做法,但我不知道如何在视图/控制器中传递哈希密码。任何建议都将不胜感激

创建.blade.php

<div class="form-group">
     <label class="required" for="password">Password</label>
           <input class="form-control {{ $errors->has('password') ? 'is-invalid' : '' }}" type="password" name="password" id="password" required>
               @if($errors->has('password'))
                   <div class="invalid-feedback">
                         {{ $errors->first('password') }}
                   </div>
                @endif
</div>  
我希望下面的图片能帮助你理解。通过注册表或UsersTableSeeder创建的具有哈希密码的用户,但是我需要能够通过创建表单成功创建用户。
您需要对密码进行哈希运算。这很可能是你的问题。所以,在你的控制器方法中,你需要这样的东西

$user = new User;
$user->name = 'user';
$user->email = 'user@user.com;
$user->password = Hash::make('password');
$user->save();

如果您有任何自定义字段,请遵循与每个字段相同的原则。

您是正确的-未更改的密码将给您带来很多问题。最简单的修复方法是在创建用户时对密码进行散列。laravel中内置了一个用于哈希的外观,因此创建:

$hashedPassword = Hash::make($request->request->get('password'))
$user = User::create($request->all());
User::where('email', $user->email)->update(['password' => $hashedPassword]);
请注意,这段代码是从我不久前编写的一个api中提取出来的,在这个api中,一个请求被发送到服务器,其中包含创建用户所需的参数(认为它只是电子邮件/密码)。但基本上步骤是:

1) 使用哈希外观和明文密码创建哈希密码

2) 创建您的用户

3) 立即使用哈希密码更新您的用户

这意味着您也可以在用户登录时使用Hash::check()方法:

        if (Hash::check($request->input('password'), User::where('email', $request->input('email'))->first()->password)) {
            // success, user logs in 
        } else {
            $msg = ['error' => true, 'message' => 'Incorrect password'];

            return response()->json($msg, 200);
        }

希望这有帮助

你也可以散列这些密码。在我看来,我该怎么做@vivek_23为什么要在查看刀片文件中散列密码?最好的方法是让管理员创建用户。现在,用户将收到一封电子邮件,说单击此链接可验证您的帐户并设置密码。@vivek_23我只是想在继续进行此操作之前使基本功能正常工作。但您不会在视图中散列密码。您可以在控制器中使用
Hash::make(“您的密码文本”)就像你对其他用户所做的那样。我建议使用这种方法,而不是我上面的答案来创建用户,然后更新密码……谢谢你,有没有办法让管理员在创建表单中输入密码并将其存储为哈希值?我不确定我是否在关注你的问题。我的建议是,当您在create表单中创建新用户时,在为新用户提交表单时,在用户控制器上调用controller方法。理论上,您可以从blade文件创建用户,但我不建议您这样做。。。
        if (Hash::check($request->input('password'), User::where('email', $request->input('email'))->first()->password)) {
            // success, user logs in 
        } else {
            $msg = ['error' => true, 'message' => 'Incorrect password'];

            return response()->json($msg, 200);
        }