Laravel Паспорт и Vue в сопровождении Жужжи, не возвращающий жетон - PullRequest
0 голосов
/ 02 августа 2020

Я использую Laravel Passport для обработки моей реализации входа в систему oauth2. Следуя видео от Dre Himself . Все работает нормально, когда на локальном хосте, но возникли проблемы с входом в реальный сайт, теперь я хочу развернуть свое приложение в DigitalOcean, и после настройки nginx, файла .env, composer, npm, паспорта настройки (php паспорт ремесленника: установить) и базу данных с помощью (php миграция ремесленника). Кажется, все работает нормально, пока мой логин не вернул 200 с полезной нагрузкой ответа

<!DOCTYPE html>\n<html lang=\"en\">\n    <head>\n        <meta charset=\"utf-8\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n        <title>Resume Workshop</title>\n\n        <!-- Fonts -->\n        <link href=\"https://fonts.googleapis.com/css2?family=Montserrat:wght@400;700;900&display=swap\" rel=\"stylesheet\">  \n        <link rel=\"stylesheet\" href=\"https://myresumeworkshop.com/css/app.css\">\n    </head>\n    <body>\n        <main id=\"app\"></main>\n        <script src=\"https://myresumeworkshop.com/js/app.js\"></script>\n    </body>\n</html>\n

Вместо правильного ответа токен доступа носителя. Забавно то, что когда я использую бессонницу для отправки почтового запроса к конечной точке / oauth / token, он возвращает токен, и я могу вручную вставить токен в свое локальное хранилище, и приложение будет работать совершенно нормально.

Вот мой код входа на сервер:

public function login(Request $request) {
        $http = new \GuzzleHttp\Client;

        try {
            $response = $http->post(config('services.passport.login_endpoint'), [
                'form_params' => [
                    'grant_type' => 'password',
                    'client_id' => config('services.passport.client_id'),
                    'client_secret' => config('services.passport.client_secret'),
                    'username' => $request->username,
                    'password' => $request->password,
                ]
            ]);
            
            // return json_decode((string) $response->getBody(), true)
            return $response->getBody();
        }
        catch (\GuzzleHttp\Exception\BadResponseException $e) {
            if ($e->getCode() === 400) {
                return response()->json('Incorrect username or password', $e->getCode());
            } else if ($e->getCode() === 401) {
                return response()->json('Your credentials are incorrect. Please try again', $e->getCode());
            }

            return response()->json('Something went wrong on the server.', $e->getCode());
        }
    }

и мой код на стороне внешнего интерфейса:

retrieveToken(context, data) {
        return new Promise((resolve, reject) => {
            axios
                .post("/login", {
                    username: data.username,
                    password: data.password
                })
                .then(response => {
                    const token = response.data.access_token;
                    localStorage.setItem("access_token", token);

                    context.commit('retrieveToken', token);
                    resolve(response);
                }).catch(error => {
                    // console.log(error)
                    reject(error)
                });
        })
    }

Когда я console.log response.data, он выведет! doctype html как выше. Я подозреваю, что это может быть связано с типом содержимого заголовка клиента Guzzle: text / html вместо application / json. Или это могло быть из-за моей nginx config.

Вот объявление ie и дамп ответа $ из запроса на публикацию guzzle

GuzzleHttp\Psr7\Response {#334
  -reasonPhrase: "OK"
  -statusCode: 200
  -headers: array:6 [
    "Server" => array:1 [
      0 => "nginx/1.14.0 (Ubuntu)"
    ]
    "Content-Type" => array:1 [
      0 => "text/html; charset=UTF-8"
    ]
    "Connection" => array:1 [
      0 => "close"
    ]
    "Cache-Control" => array:1 [
      0 => "no-cache, private"
    ]
    "Date" => array:1 [
      0 => "Sat, 01 Aug 2020 22:45:37 GMT"
    ]
    "Set-Cookie" => array:3 [
      0 => "XSRF-TOKEN=eyJpdiI6IlNlWWU4NzA2Q0ZLcFdQeWR0dHlra2c9PSIsInZhbHVlIjoiNTZWSlRmUk80UzViV2FXSVFPRGlmTHdGXC9kVmNxRG1oRHNwcllyNHhqOXNOZk0zTloxYlZ3bkwrbG03eTF1SkUiLCJtYWMiOiIyOTIyZWY5ODMyNTNiMDc5Y2JiOTI4ZDEwYjM0YTczYzcxNzgyZWJiYTA1NjM2YzM3MTBhN2U1MTEwZWE5ZjM5In0%3D; expires=Sun, 02-Aug-2020 00:45:37 GMT; Max-Age=7200; path=/"
      1 => "resume_workshop_session=eyJpdiI6InlkWTlHWnBqVXZnOFwvRndUOGduQWV3PT0iLCJ2YWx1ZSI6IlRpaXlaTmJzZUl2MlVvRlBFakhVK0FIeDV3K0xXMnlVWmpVUTNjWDBHbFJ1UkNVbWZQSTVxcXg3RHNvZUF0NXYiLCJtYWMiOiJlNTI2YjQyNjRjMGZhODNhNjhkNjdhOWQ1MzQ5YWY2MmNlZTAwODk3M2NiYmI5YTJiNDQxMDUxNWQ3NzNiZmY3In0%3D; expires=Sun, 02-Aug-2020 00:45:37 GMT; Max-Age=7200; path=/; httponly"
      2 => "LfsxdWN0U7YDplqYkRiAHeaRYayLUBKvUToCvfV3=eyJpdiI6IkdEU1NVVnk5VE9ESzNvNjNGTTYwdUE9PSIsInZhbHVlIjoidEZ3WjR5dDdSR0Zya1Z5UkpnVk5JU3FVWWJCczhXOHkxd0dud0FpVDhkK29cL2NKemNZNTAwS1N6alpxSm0yNU13bGRFREhRS3BnSWd6RDZFc05MNXJsN3FFWktNTjBzcjkyVHVHS1hNN0NuZEZvZFZVak85SUQrRWRPaFRQK3BtYTc1YU4wOHlVbmlkdnNrWGVYcUhQcmRPbjExXC8rUldyTFwvMFwvVUltaGk3QzZcL1d0RVA1SVFIbzgxVmZVSjE5SnFJazZqd1d4Z000QjB4MWxLVThJd1FYQjN2QTlCeGp3WjZIRlpFd0VHU3ZcL3p3N2lsRXdOOGhuXC9iUWJMd3Nmb0FwaENIOW1qTVU5dWJWZkVTXC9oeXoxRUpTODRxT3hmcExoWW85cG9DOGFGaDNyUmxRdDJGYlpBbkNpZXNSbGNIYlNZbTN4REhjREkrV0doK0c5Vk1kWW82RERCN1NDRlhWcFBLVU5tWDdXdGM9IiwibWFjIjoiMmRhYzlhZGVhZWIwMGVmZDdiYTJiNWUwYTAwNDQ0MTgxMTY1ZDY2MmU5MWE0MWE5ODA5ZGJlNWIyYjE2NzY5MSJ9; expires=Sun, 02-Aug-2020 00:45:37 GMT; Max-Age=7200; path=/; httponly"
    ]
  ]
  -headerNames: array:6 [
    "server" => "Server"
    "content-type" => "Content-Type"
    "connection" => "Connection"
    "cache-control" => "Cache-Control"
    "date" => "Date"
    "set-cookie" => "Set-Cookie"
  ]
  -protocol: "1.1"
  -stream: GuzzleHttp\Psr7\Stream {#333
    -stream: stream resource @26
      wrapper_type: "PHP"
      stream_type: "TEMP"
      mode: "w+b"
      unread_bytes: 0
      seekable: true
      uri: "php://temp"
      options: []
    }
    -size: null
    -seekable: true
    -readable: true
    -writable: true
    -uri: "php://temp"
    -customMetadata: []
  }
}
...