Paseto passport
npm install passport-paseto
!workflow
``shell`
npm i passport-paseto
`ts
const app = fastify();
// Must have due to @fastify/passport depends on @fastify/flash
app.register(fastifySession, {
secret: "secret with minimum length of 32 characters",
});
app.register(fastifyPassport.initialize());
const key = await V3.generateKey("local");
const token = await V3.encrypt(
{
username: "test",
},
key,
{
expiresIn: "99999999s",
}
);
fastifyPassport.use(
"local-paseto",
new LocalPasetoStrategy(
{
getToken: fromAuthBearer(),
key,
version: "V3",
},
(payload, done) => {
done(null, { username: "username_test" });
}
)
);
app.get(
"/test/bearer",
{
preValidation: fastifyPassport.authenticate("local-paseto", {
authInfo: false,
session: false,
}),
},
async function (req, reply) {
reply.send();
}
);
app.listen();
`
#### LocalPasetoStrategyOptions:
- key: The secret key to decrypt with. Alternatively a 'k3.local.[data]'crypto.createSecretKey()
PASERK string or any input that works for .passReqToCallback
- : default false.getToken
- : (...args) => (req) => stringfromHeader
- : extract token from header default X-Paseto-Token.fromAuthBearer
- : extract token from Authorization Bearer.fromAuthScheme
- : extract token from Authorization, e.g. Basic, Digest ...fromBody
- : extract token from request body.fromQuery
- : extract token from request query.V1
- version: | V3consumeOptions
- :
#### Verify callback ([req], payload, next) => void
#### PublicPasetoStrategyOptions:
- version:V1 | V2 | V3 | V4
`ts
const fastifyPassport = require("@fastify/passport");
const { LocalPasetoStrategy, fromAuthBearer } = require("passport-paseto");
const { V3 } = require("paseto");
const { secretKey, publicKey } = await V3.generateKey("public", {
format: "paserk",
});
const token = await V3.sign(
{
username: "test",
},
secretKey,
{
expiresIn: "99999999s",
}
);
fastifyPassport.use(
"public-paseto",
new PublicPasetoStrategy(
{
getToken: fromAuthBearer(),
publicKey,
version: "V3", //default V4
},
(payload, done) => {
done(null, { username: "username_test" });
}
)
);
app.get(
"/test/bearer",
{
preValidation: fastifyPassport.authenticate("public-paseto", {
authInfo: false,
session: false,
}),
},
async function (req, reply) {
reply.send();
}
);
`
`shell``
npm i
npm test
Only test with Fastify.