php - 如何在登录控制器中使用 Crypt 加密登录
问题描述
我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";
}
解决方案
原创
您需要使用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 来解码密码并通过电子邮件发送。使用哈希我无法解码它。这就是我需要地穴的原因。
我真的不推荐它。这就是为什么我们有“忘记密码”功能来创建新密码。
好的,回到主题,如何使用 Crypt 加密登录?
您需要在中添加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
),则意味着您将无法登录。
我真的不推荐它。
推荐阅读
- c - 如何在 GCC 的内联汇编中指定一个特定的寄存器来分配 C 表达式的结果?
- python - Openmodelica 仿真和 FMPy 仿真结果不匹配
- mysql - mysql中的当前月份日期时间计数
- amazon-web-services - 将麦克风和摄像头路由到 Windows ec2 实例
- c# - 使用 ASP.Net Identity 创建一系列用户
- javascript - 不能让它重演 html5 canvas 问题与 javascript
- python - 从 UID 获取游戏名称
- laravel - Laravel 在 Azure Web App for Linux 上速度太慢了
- python - 为什么 Altair 条形图中最左边的条不尊重选择画笔位置?
- pandas - 根据列值创建列 - 循环列