我正在使用Crypt::
进行注册和登录。我的注册成功但登录失败。请检查代码并帮助我。
public function Login(Request $request)
{
$this->validate($request, [
'email' => 'required',
'password' => 'required',
]);
$userdata = array(
'email' => $request->email,
'password' => \Crypt::encrypt($request->password)
);
if (Auth::attempt($userdata) {
echo "success";die();
}
return "Ops! snap! seems like you provide an invalid login credentials";
}
答案 0 :(得分:1)
我以前有这个问题。 我使用了Crypt Encryption,因为我需要在laravel刀片输入元素中显示从加密到解密的密码。
我深入研究了项目中的laravel参考,并找到了解决方案。 默认情况下,laravel使用HASH进行加密,因为我使用了Crypt进行注册和登录。 当我尝试登录时,返回false。 我所做的是编辑位于其中的一个laravel函数
vendor\laravel\framework\src\Illuminate\Auth\EloquentServiceProvider.php
并从中更改此功能
public function validateCredentials(UserContract $user, array $credentials)
{
$plain = $credentials['password'];
return $this->hasher->check($plain, $user->getAuthPassword());
}
对这些
public function validateCredentials(UserContract $user, array $credentials)
{
$plain = $credentials['password'];
return \Crypt::decrypt($user->getAuthPassword());
}
答案 1 :(得分:0)
您需要使用Hashing,而不是Encryption。
注册
...
$userdata = [
'email' => $request->email
'password' => Hash::make($request->password)
];
...
// User saved..
<强>登录强>
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials) {
// It work
}
参考:
OP :我需要Crypt :: decrypt解码密码并发送电子邮件。使用哈希我无法解码它。这就是我需要地穴的原因。
我真的不推荐。这就是为什么我们有“忘记密码”功能来创建新密码。
Is it secure to store passwords with 2 way encryption?
好的,回到主题,如何使用加密加密登录?
您需要在login()
中添加Auth\LoginController
方法:
/**
* Handle a login request to the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response|\Illuminate\Http\JsonResponse
*
* @throws \Illuminate\Validation\ValidationException
*/
public function login(Request $request)
{
$decrypted = $request->input('password');
$user = User::where('email', $request->input('email'))->first();
if ($user) {
if (Crypt::decryptString($user->password) == $decrypted) {
Auth::login($user);
return $this->sendLoginResponse($request);
}
}
return $this->sendFailedLoginResponse($request);
}
所有Laravel的加密值都使用消息验证代码(MAC)进行签名,以便加密后无法修改其基础值。
您必须拥有相同的密钥。如果您更改密钥(artisan key:generate
),则表示您无法登录。
我真的不推荐。