Laravel:使用带有斜线的哈希令牌进行自定义验证

我正在尝试创建自己的自定义验证电子邮件,但似乎我在某个地方有错。


该路线运行良好,但是当我在某处遇到带有“/”斜线的散列令牌时,它说找不到。我怎样才能避免这种情况?


创建令牌


$permission = new Permission();

$permission->user()->associate($isPermitted_user);

$permission->token = Hash::make(now());

$permission->save();

创建我的网址


$permission = Permission::find($this->permission_id);

    $permission_url = url('/permission/'.$permission->token);

    $user = $permission->user;

    $data = array(

        'permission_url' => $permission_url,

        'name' => $notifiable->name,

        'user' => $user,

    );

网页.php


  Route::get('/permission/{token}', 'PermissionsController@permission')->middleware('verified');


明月笑刀无情
浏览 132回答 2
2回答

慕田峪9158850

来自 Laravel 关于编码正斜杠的文档。编码正斜杠Laravel 路由组件允许除 / 之外的所有字符。您必须使用 where 条件正则表达式明确允许 / 成为占位符的一部分:Route::get('search/{search}', function ($search) { return $search; })->where('search', '.*');这意味着在您的情况下允许“/”成为占位符的一部分,您需要在令牌参数上使用 where 路由条件正则表达式: Route::get('/permission/{token}', 'PermissionsController@permission')->middleware('token')->where('token', '.*');Inspired by the comment by lagbox

Smart猫小萌

要删除 Hash 中的斜杠:str_replace('/', '', Hash::make(now()));
打开App,查看更多内容
随时随地看视频慕课网APP