I’m currently building a standalone SPA based on Vue.js that interacts with a Laravel API. I managed to successfully implement the client-side of the authentication and use the Auth0 access_token in the Authorization header of the requests to my API.
After following the getting started tutorial, I ended up with the code below to decode the access_token and retrieve the user_id.
$token = $this->getToken($request);
$decodedJWT = $this->auth0->decodeJWT($token);
$user_id = $decodedJWT->sub;
The next step in my authentication process would be to either login the existing user or create a new one. In order to perform the latter case, I need some more details from the user. The tutorial states that the email and name of the user can be retrieved from the JWT.
$user = new User();
$user->email = $decodedJWT->email;
$user->auth0id = $decodedJWT->sub;
$user->name = $decodedJWT->name;
$user->save();
However, even after providing the right scopes (openid email profile) and requesting the right permissions on my social connections, I’m not able to retrieve these details.
After some research I found this article saying that an access_token holds no information about the user and that the user details can only be retrieved using the /userinfo endpoint. This sounds logic to me, so I figured that the Auth0::getUser() method could be the solution to my problem. However, this method always returns null. After some debugging I found out that the problem is located in the Auth0::getAuthorizationCode() method.
protected function getAuthorizationCode() {
if ($this->response_mode === 'query') {
return (isset($_GET'code']) ? $_GET'code'] : null);
} elseif ($this->response_mode === 'form_post') {
return (isset($_POST'code']) ? $_POST'code'] : null);
}
return null;
}
As you can see, the method requires a code parameter, which seems not to exist. Therefore, the method returns null and the /userinfo API call is never sent.
Since the examples and documentation of the PHP/Laravel integrations are quite confusing and incomplete, I can’t figure out what I’m doing wrong. Any help would be greatly appreciated.