Php 如何仅在Laravel中使用url和哈希参数登录?(无用户名和密码)

Php 如何仅在Laravel中使用url和哈希参数登录?(无用户名和密码),php,laravel,authentication,url,hash,Php,Laravel,Authentication,Url,Hash,我想在不输入表单的情况下发送用户自己的哈希链接登录,我已经尝试过了,但速度太慢,所以我不确定它是否有效: web.php Route::get('link/{hash}', 'Auth\LoginController@loginless')->where('hash', '(.*)'); LoginController.php public function loginless($hash) { $response = array(); $respon

我想在不输入表单的情况下发送用户自己的哈希链接登录,我已经尝试过了,但速度太慢,所以我不确定它是否有效:

web.php

Route::get('link/{hash}', 'Auth\LoginController@loginless')->where('hash', '(.*)');
LoginController.php

public function loginless($hash)
{
    $response           = array();
    $response['status'] = 500;
    $response['url']    = null;
    
    $username = '';
    $password = '';
    $arr_username = User::select('username','password')->get();
    
    foreach ($arr_username as $arr){
        if (Hash::check($arr->username, $hash)){
            $username = $arr->username;
            $password = $arr->password;
            break;
        }
    }

    if (\Auth::attempt(['username' => $username, 'password' => $password])) {
        $response['status'] = 200;
        $response['url']    = route('dashboard');
    }

    return $response;
}

有什么办法可以提高效率吗?(没有foreach是否可能?

在您的情况下,您可以使用密钥加密,

哈希::检查旨在花费很长时间来防止密码被轻易强制使用。你不能让它变得高效和安全。我建议不要向用户提供他们的散列,也不要创建一个可以通过GET请求登录用户的链接,因为任何应用程序(如聊天或电子邮件)都可能试图抓取页面以呈现预览。如果您绝对必须这样做,至少通过POST请求使用过期的一次性密码。(请看philo.com是如何做到的。)