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()
将仅显示令牌值。
我创建了一个用于接受好友请求的小帮助函数。这个函数位于 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()
将仅显示令牌值。