Laravel PHP 表格内的 csrf 令牌

Laravel csrf token within PHP form

我创建了一个用于接受好友请求的小帮助函数。这个函数位于 PHP 文件中(很明显),看起来像这样:

(只有相关部分)

foreach($friendrequests as $request){
    $username = DB::table('users')->where('id', $request->sender_id)->value('name');
    $notify .= '<li>';
    $notify .= '<strong><a href="/profile/'.$username.'">'.$username.'</a></strong><br>möchte dein Freund sein';
    $notify .= '<form action="/friend/request/accept/'.$request->sender_id.'" method="post"><input type="hidden" name="_token" value="csrf_field();"><button type="submit">Akzeptieren</button></form>';
    $notify .= '<form action="/friend/request/deny/'.$request->sender_id.'" method="post"><input type="hidden" name="_token" value="csrf_field();"><button type="submit">Ablehnen</button></form>';
    $notify .= '</li>';
}

我知道这有点乱。我是 Laravel.

的新手

反正就是两种形式。一种用于接受请求,一种用于拒绝请求。现在我正在努力解决的问题是 csrf 令牌。

如何在 PHP 帮助文件中实现它? 我知道如何在 blade 模板中使用它们,但我不会似乎让它在辅助函数中工作。

尝试将 _token 隐藏元素添加到您的代码中,如下所示。您还可以使用 csrf_token() helper function 在表单中添加表单标记。

foreach($friendrequests as $request){
        $username = DB::table('users')->where('id', $request->sender_id)->value('name');
        $notify .= '<li>';
        $notify .= '<strong><a href="/profile/'.$username.'">'.$username.'</a></strong><br>möchte dein Freund sein';
        $notify .= '<form action="/friend/request/accept/'.$request->sender_id.'" method="post"><input type="hidden" name="_token" value="'.Session::token().'"><button type="submit">Akzeptieren</button></form>';
        $notify .= '<form action="/friend/request/deny/'.$request->sender_id.'" method="post"><input type="hidden" name="_token" value="'.Session::token().'"><button type="submit">Ablehnen</button></form>';
        $notify .= '</li>';
    }

您已添加字段,但需要将 csrf_token() 值连接到您的字符串。现在,它会直接打印 csrf_token 作为值。

试试这个:

$notify .= '<form action="/friend/request/accept/'.$request->sender_id.'" method="post"><input type="hidden" name="_token" value="' . csrf_token() . '"><button type="submit">Akzeptieren</button></form>';

此外,csrf_field() 函数会将带有令牌值的输入字段回显到当前请求,csrf_token() 将仅显示令牌值。