【问题标题】:Adding token to view make laravel添加令牌以查看 make laravel
【发布时间】:2017-07-19 05:09:13
【问题描述】:

我有这样的令牌链接:

<a href="{{ URL::to('/users/submit/' . $id->id) }}?_token={{ csrf_token() }}">Submit New</a>

产生url:

http://example.com/users/submit/20?_token=fpf0LwHyf0JGBg0fnixjRFo1B5GgUM3RDp6dVgUU

现在在我的控制器中,我添加了检查数据库中一列的条件,并基于此返回不同的视图。

public function wrongIdSubmit($Id) {

    $submits = self::$user->where('submit_id', $Id)->first();

    if (!$txid) {
        App::abort(404);
    }       

    if($submits->submit_id > 3) {
        return View::make('fail',[              
            'submits' => $submits               
        ]);         
    }

    else {
        return View::make('submit',[            
            'submits' => $submits           
        ]);
    }
}

我的问题是如何传递这个令牌?_token={{ csrf_token() }} 以返回 View::make 以及 $submits 变量?因为就像现在我有错误

production.ERROR: Illuminate\Session\TokenMismatchException

【问题讨论】:

    标签: php laravel laravel-4.2


    【解决方案1】:

    Laravel 提供了一个函数,它可以返回带有标记的直接输入隐藏字段。

    csrf_field()
    

    它将生成一个包含 CSRF 令牌值的 HTML 隐藏输入字段。

    所以你可以这样尝试:

    return View::make('fail',[              
       'submits' => $submits,
       'token' => csrf_field()               
    ]); 
    

    在视图中只需打印:

    {!! $token !!}
    

    或者直接也喜欢:

    {!! csrf_field() !!}
    

    输出会是这样的:

    <input type="hidden" name="_token" value="*****" />
    

    祝你好运..

    【讨论】:

    • 感谢您的回答,但收到错误Call to undefined function csrf_field()。波纹管的答案工作正常,但我不确定这是否会保护页面,因此其他用户和/或未登录的用户将无法访问该页面
    • @VLS 你目前使用的是哪个版本的 Laravel?
    • 这个项目在 4.2 上运行
    • csrf_field() 仅可用 >= 5.1
    • 但是这个直接在查看页面上工作{{ Form::hidden('_token', csrf_token()) }}
    【解决方案2】:

    您必须将令牌添加到表单本身。您不能在 URL 中传递它。将以下内容添加到您的表单中:

    <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
    

    【讨论】:

    • 当我的路线是这样的时,这应该确保我无法从未登录的用户访问该页面:Route::post('/submit/{Id}', ['uses' =&gt; 'UsersController@Submit', 'before' =&gt; 'auth']); 因为我有`'before' => 'auth']`,对吗?
    猜你喜欢
    • 1970-01-01
    • 2018-03-11
    • 2021-06-19
    • 2019-12-08
    • 2018-01-11
    • 2010-12-24
    • 2017-04-13
    • 2019-07-02
    • 1970-01-01
    相关资源
    最近更新 更多