-
Notifications
You must be signed in to change notification settings - Fork 927
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: laravel passport provider (#157)
- Loading branch information
1 parent
7202cc0
commit 9b09459
Showing
4 changed files
with
113 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
# Laravel Passport | ||
|
||
[Source Code](https://github.com/nuxt-community/auth-module/blob/dev/lib/providers/passport.js) | ||
|
||
## Usage | ||
|
||
```js | ||
auth: { | ||
strategies: { | ||
'laravel.passport': { | ||
url: '...', | ||
client_id: '...', | ||
client_secret: '...' | ||
}, | ||
} | ||
} | ||
``` | ||
|
||
## Usage | ||
|
||
Anywhere in your application logic: | ||
|
||
```js | ||
this.$auth.loginWith('passport') | ||
``` | ||
|
||
💁 This provider is based on [oauth2 scheme](../schemes/oauth2.md) and supports all scheme options. | ||
|
||
### Obtaining `url`, `client_id` and `client_secret` | ||
|
||
These options are **REQUIRED**. The `url` is the location of your Laravel application. To obtain the `client_id` and `client_secret`, create a new client app in your [Laravel app](https://laravel.com/docs/5.6/passport#managing-clients). | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
const axios = require('axios') | ||
const bodyParser = require('body-parser') | ||
const { assignDefaults } = require('./_utils') | ||
|
||
module.exports = function laravelPassport (strategy) { | ||
assignDefaults(strategy, { | ||
_scheme: 'oauth2', | ||
_name: 'laravel.passport', | ||
authorization_endpoint: `${strategy.url}/oauth/authorize`, | ||
token_endpoint: `${strategy.url}/oauth/token`, | ||
token_key: 'access_token', | ||
token_type: 'Bearer', | ||
response_type: 'code', | ||
grant_type: 'authorization_code', | ||
scope: '*' | ||
}) | ||
|
||
// Get client_secret, client_id and token_endpoint | ||
const clientSecret = strategy.client_secret | ||
const clientID = strategy.client_id | ||
const tokenEndpoint = strategy.token_endpoint | ||
|
||
// IMPORTANT: remove client_secret from generated bundle | ||
delete strategy.client_secret | ||
|
||
// Endpoint | ||
const endpoint = `/_auth/oauth/${strategy._name}/authorize` | ||
strategy.access_token_endpoint = endpoint | ||
|
||
// Set response_type to code | ||
strategy.response_type = 'code' | ||
|
||
// Form parser | ||
const formMiddleware = bodyParser.urlencoded() | ||
|
||
// Register endpoint | ||
this.options.serverMiddleware.unshift({ | ||
path: endpoint, | ||
handler: (req, res, next) => { | ||
if (req.method !== 'POST') { | ||
return next() | ||
} | ||
|
||
formMiddleware(req, res, () => { | ||
const { | ||
code, | ||
redirect_uri: redirectUri = strategy.redirect_uri, | ||
response_type: responseType = strategy.response_type, | ||
grant_type: grantType = strategy.grant_type | ||
} = req.body | ||
|
||
if (!code) { | ||
return next() | ||
} | ||
|
||
axios | ||
.request({ | ||
method: 'post', | ||
url: tokenEndpoint, | ||
data: { | ||
client_id: clientID, | ||
client_secret: clientSecret, | ||
grant_type: grantType, | ||
response_type: responseType, | ||
redirect_uri: redirectUri, | ||
code | ||
}, | ||
headers: { | ||
Accept: 'application/json' | ||
} | ||
}) | ||
.then(response => { | ||
res.end(JSON.stringify(response.data)) | ||
}) | ||
.catch(error => next(error)) | ||
}) | ||
} | ||
}) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters