關於 Laravel Vue SPA - 代理 Token 教程,使用 proxy 代理卻會一直 pedning 狀態

如問題所敘述,我在參照 JellyBoll 大大此教程,做到使用 proxy 代理這一步驟,會一直顯示pedning 狀態

看評論有說似乎不能用 php artisan serve 啟動 server 然後又自己呼叫 proxy 方法去要 token~~!

我現在做法是在本地用 Nginx 去指到 vue-spa 目錄,http://localhost:8084,這邊沒有問題,
然後我在去本地 vue-spa 目錄下使用 php artisan serve 來啟動,
然後我先用 Postman 打 Api http://localhost:8000/oauth/token 也有正確拿得到 token,
但是當我用網頁 http://localhost:8084/login 這邊輸入帳號密碼後登入,就會有以下錯誤:

exception:"GuzzleHttp\Exception\ClientException"

file:"/Users/hahn/Practice/vue-spa/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php"

line:113

message:"Client error: `POST http://localhost:8000/oauth/token` resulted in a `400 Bad Request` response:{"error":"unsupported_grant_type","message":"The authorization grant type is not supported by the authorization server." (truncated...)"

請問我問題出在哪呢?
下面是我 proxy function 的 code

public function proxy($grant_type, $data = [])
    {
        $data = array_merge($data, [
          'client_id' => env('PASSPORT_Client_ID'),
          'client_secret' => env('PASSPORT_Client_Secret'),
          'grant_type' => $grant_type,
        ]);

        $response = $this->http->post('http://localhost:8000/oauth/token', ['form-params' => $data]);
        .......
    }

還是在 Nginx 設定那邊要加什麼設定?
我第一次用 proxy 還在學習,還請各位大大多指導了~謝謝!

$response = $this->http->post('http://vue-spa.dev/oauth/token', [
            'form_params' => $data,
        ]);

这里面的 form_params

uumyheart

错误提示是在说请求token的时候grant_type不支持,你检查一下’grant_type’ => grant_type这一行中grant_type的值。如果是登陆获取access_token的话grant_type为password,如果是access_token已过期,通过refresh_token重新获取access_token的话grant_type为’refresh_token’

blaze0207 回复 uumyheart

這是我登入的 function 如下:

public function login($email, $password)
    {
        return $this->proxy('password', [
            'username' => $email,
            'password' => $password,
            'scope' => ''
        ]);
    }

應該是沒有錯,我有給 grant_type,這樣的話還有可能是哪邊的問題呢?

JellyBool 回复 blaze0207
$response = $this->http->post('http://vue-spa.dev/oauth/token', [
            'form_params' => $data,
        ]);

这里面的 form_params

blaze0207 回复 JellyBool

@感謝 JellyBool
真的改成這樣就可以了!!!
原來我又犯了低級錯誤…真是難找!

gcpark

你检查一下 LoginForm.vue axios.post 地址 有没有对。。。我跟着 视频走的时候 忘了改提交地址。。。也出现过 grant_type错误。。。。

blaze0207 回复 gcpark

@gcpark
改成上面 JellyBool 大大說的就可以了!!!
原來是我自己又犯了低級錯誤…