通过vuejs提交为帖子时如何验证签名的URL?

时间:2018-06-27 19:00:02

标签: laravel laravel-5

我使用的是laravelssignedRoutes,并且已经在服务器上签署了一条路由,现在我需要将该路由再次提交给服务器,但是需要使用JavaScript从客户端提交。下面的代码是我将其发送到服务器之前所拥有的。

let formData = {
    signature: '51bd52ece280dd29857aa7443e9178e64cf27047e831f4cdfd32c951c4571f65',
    testing: '12345',
    expires: '1530209048',
    user: '7',
    password: this.password,
    passwordConfirm: this.passwordConfirm
}

return axios.post(route('backend.user.activate'), formData)

当我在服务器上收到此发帖请求

public function activate(Request $request)
{
    if ($request->hasValidSignature()) {
        dd('we cool!');
    }

“我们很酷!”不会为我打印,这意味着Laravel作为帖子发送时无法验证有效签名。

我也尝试过像这样

return axios.post(route('backend.user.activate', urlSignature), formData)

其中

urlSignature="7?expires=1530209048&testing=12345&signature=51bd52ece280dd29857aa7443e9178e64cf27047e831f4cdfd32c951c4571f65"

但是laravel仍然无法验证签名是否有效,因为它可以像这样的简单路径工作

Route::get('/activate/{user}', 'Auth\ActivateController@showActivate')->name('backend.user.activate.show');

但是一旦我发帖

Route::post('/activate/{user}', 'Auth\ActivateController@activate')->name('backend.user.activate');

失败。

我需要使用该帖子,因为我必须在该帖子中发送密码,并且我不希望通过get请求发送密码。

编辑:

signedUrl

$url = URL::temporarySignedRoute('backend.user.activate.show', now()->addHours(24), ['user' => $this->user->id]);

路线

Route::post('/activate/{user}', 'Auth\ActivateController@activate')->name('backend.user.activate');

内部vue文件:

计算属性

    urlSignature() {
        console.log(window.location.pathname.match(/[^\/]*$/)[0] + window.location.search)
        return window.location.pathname.match(/[^\/]*$/)[0] + window.location.search
    },

对服务器进行发布呼叫:

   return axios.post(route('backend.user.activate', this.urlSignature))
          .then((response) => {
              this.activated = true
          })

生成的网址:

http://laraone.oo/backend/activate/8%3Fexpires%3D1530213677%26signature%3D793bd75d461b41ee587a65b9064e7ed41e4d4a149ed81f316d1fbb7cbdde70a2
用户在电子邮件中看到的

原始URL是:

http://laraone.oo/backend/activate/8?expires=1530213677&signature=793bd75d461b41ee587a65b9064e7ed41e4d4a149ed81f316d1fbb7cbdde70a2

注意如何8?变成8%3,其余的特殊字符也一样。

如果您想知道我要做什么。

用户收到电子邮件并单击生成的链接以验证帐户后,我还希望他们也设置自己的密码,首先在选择密码并按“激活”后,我将从vuejs客户端使用密码向服务器发送请求,同时我再次尝试将签名的url内容发送到服务器。在保存密码并激活用户之前,需要执行此操作。

但是,我仍然无法使其正常工作。还有其他想法吗?

enter image description here

0 个答案:

没有答案