2017-03-09 179 views
0

我创建了一个小帮助函数来接受朋友请求。该功能位于一个PHP文件(显然)内,看起来像这样:PHP中的Laravel csrf令牌

(只有相关的部分)

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帮助程序文件中实现此操作?我知道如何在刀片模板中使用它们,但似乎无法在辅助函数中使用它们。

回答

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

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