90 lines
3.0 KiB
Markdown
90 lines
3.0 KiB
Markdown
# passport-icynet
|
|
|
|
Passport strategy for authentication with [Icy Network](https://icynet.eu) through the OAuth 2.0 API.
|
|
|
|
## Usage
|
|
`npm install passport-icynet --save`
|
|
|
|
#### Configure Strategy
|
|
The Icy Network authentication strategy authenticates users via a Icy Network user account and OAuth 2.0 token(s). A Icy Network API client ID, secret and redirect URL must be supplied when using this strategy. The strategy also requires a `verify` callback, which receives the access token and an optional refresh token, as well as a `profile` which contains the authenticated Icy Network user's profile. The `verify` callback must also call `cb` providing a user to complete the authentication.
|
|
|
|
```javascript
|
|
var IcyNetworkStrategy = require('passport-icynet').Strategy;
|
|
|
|
var scopes = ['image', 'email'];
|
|
|
|
passport.use(new IcyNetworkStrategy({
|
|
clientID: 'id',
|
|
clientSecret: 'secret',
|
|
callbackURL: 'callbackURL',
|
|
scope: scopes
|
|
},
|
|
function(accessToken, refreshToken, profile, cb) {
|
|
User.findOrCreate({ icynetId: profile.id }, function(err, user) {
|
|
return cb(err, user);
|
|
});
|
|
}));
|
|
```
|
|
|
|
#### Authentication Requests
|
|
Use `passport.authenticate()`, and specify the `'icynet'` strategy to authenticate requests.
|
|
|
|
For example, as a route middleware in an Express app:
|
|
|
|
```javascript
|
|
app.get('/auth/icynet', passport.authenticate('icynet'));
|
|
app.get('/auth/icynet/callback', passport.authenticate('icynet', {
|
|
failureRedirect: '/'
|
|
}), function(req, res) {
|
|
res.redirect('/secretstuff') // Successful auth
|
|
});
|
|
```
|
|
|
|
#### Refresh Token Usage
|
|
In some use cases where the profile may be fetched more than once or you want to keep the user authenticated, refresh tokens may wish to be used. A package such as `passport-oauth2-refresh` can assist in doing this.
|
|
|
|
Example:
|
|
|
|
`npm install passport-oauth2-refresh --save`
|
|
|
|
```javascript
|
|
var IcyNetworkStrategy = require('passport-icynet').Strategy
|
|
, refresh = require('passport-oauth2-refresh');
|
|
|
|
var icynetStrat = new IcyNetworkStrategy({
|
|
clientID: 'id',
|
|
clientSecret: 'secret',
|
|
callbackURL: 'callbackURL'
|
|
},
|
|
function(accessToken, refreshToken, profile, cb) {
|
|
profile.refreshToken = refreshToken; // store this for later refreshes
|
|
User.findOrCreate({ icynetId: profile.id }, function(err, user) {
|
|
if (err)
|
|
return done(err);
|
|
|
|
return cb(err, user);
|
|
});
|
|
});
|
|
|
|
passport.use(icynetStrat);
|
|
refresh.use(icynetStrat);
|
|
```
|
|
|
|
... then if we require refreshing when fetching an update or something ...
|
|
|
|
```javascript
|
|
refresh.requestNewAccessToken('icynet', profile.refreshToken, function(err, accessToken, refreshToken) {
|
|
if (err)
|
|
throw; // boys, we have an error here.
|
|
|
|
profile.accessToken = accessToken; // store this new one for our new requests!
|
|
});
|
|
```
|
|
|
|
|
|
## Examples
|
|
An Express server example can be found in the `/example` directory. Be sure to `npm install` in that directory to get the dependencies.
|
|
|
|
## Credits
|
|
* Jared Hanson - used passport-github to understand passport more and kind of as a base.
|