【问题标题】:Getting invalid signature error when I send GET request in postman with authorization当我在具有授权的邮递员中发送 GET 请求时出现无效签名错误
【发布时间】:2020-09-30 11:30:48
【问题描述】:

我有一个电子邮件验证方法,当我注册用户时它正常发送电子邮件,我想测试路由email/verify/{id},当用户单击验证链接时触发,但我遇到了邮递员问题请求,它说我发送授权令牌时签名无效,如果我删除它会引发不同的错误(403,未授权)

我的路线

Route::prefix('auth')->group(function () {
    Route::group(['middleware'=>'auth:api'], function(){
        Route::get('user', 'Auth\AuthController@user');
        Route::get('email/verify/{id}', 'Auth\VerificationController@verify')->name('verification.verify');
        Route::get('email/resend', 'Auth\VerificationController@resend');
    });
});

验证控制器

public function verify(Request $request){
        if ($request->route('id') == $request->user()->getKey() &&
            $request->user()->markEmailAsVerified()){
                event (new Verified($request->user()));
            }

        return response()->json('verified');
    }

    public function resend(Request $request){
        if ($request->user()->hasVerifiedEmail()){
            return response()->json('already_verified', 422);
        }

        $request->user()->sendEmailVerificationNotification();

        return response()->json([
            'notified'
        ]);
    }

    public function __construct(){
        $this->middleware('auth:api');
        $this->middleware('signed')->only('verify');
        $this->middleware('throttle:6,1')->only('verify', 'resend');
    }

我在邮递员中发送请求是这样的:

我不知道是我做错了请求还是我的代码有问题。有什么线索吗?

【问题讨论】:

    标签: laravel postman


    【解决方案1】:

    您有 signed 中间件,它需要另一个 GET 参数。 你可以通过这个 laravel 函数获取签名的 url URL::signedRoute('verification.verify', []); 并在邮递员中使用该网址

    编辑摘要: 必须将env.APP_URL 设置为具有相同的端口,signedRoute 函数才能工作

    【讨论】:

    • 喜欢这个? imgur.com/OyfWXO9 但我得到了同样的错误
    • 目前,什么都没有,我一开始就有签名,但我得到了无效的签名错误,所以我删除了它
    • 那么您的解决方案是删除middleware 吗?如果你想试试,第二个参数如果signedRoute是URL的GET parameter,所以你可以把[id=>40],变成这样URL::signedRoute('verification.verify', ["id"=>40]);
    • 注释掉中间件工作,这样做有什么问题吗?我不知道删除那个中间件会不会导致安全问题或什么,这是我第一次使用 Laravel 作为 API
    • 是的,它会导致安全问题,验证是您以某种方式授权此人更改您的验证数据库。没有签名的网址,每个人都可以暴力破解您的网址..只需通过传递第二个参数["id"=>40] 尝试我的评论
    猜你喜欢
    • 2023-02-02
    • 1970-01-01
    • 2022-01-23
    • 2018-03-29
    • 2022-07-19
    • 1970-01-01
    • 2015-12-21
    • 2020-12-11
    • 2021-08-15
    相关资源
    最近更新 更多