首页 > 解决方案 > 如何在登录控制器中使用 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";
}

标签: phplaravelencryptioneloquentlaravel-5.2

解决方案


原创

您需要使用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 来解码密码并通过电子邮件发送。使用哈希我无法解码它。这就是我需要地穴的原因。

我真的不推荐它。这就是为什么我们有“忘记密码”功能来创建新密码。

使用 2 路加密存储密码是否安全?

好的,回到主题,如何使用 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),则意味着您将无法登录。

我真的不推荐它


推荐阅读