PHP表单中的Laravel csrf标记

时间:2017-03-09 08:11:26

标签: php csrf laravel-5.4

我创建了一个小辅助函数来接受朋友请求。这个函数位于一个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帮助文件中实现它?我知道如何在刀片模板中使用它们,但我似乎无法在辅助函数中使它。

2 个答案:

答案 0 :(得分:1)

尝试将_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>';
    }

答案 1 :(得分:1)

您已添加字段,但需要将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()将仅显示令牌值。