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