
Security News
/Research
Wallet-Draining npm Package Impersonates Nodemailer to Hijack Crypto Transactions
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
graphql-directive-auth
Advanced tools
The graphql-directive-auth
was created to help with common authentication tasks that is faced in almost every API.
yarn add graphql-directive-auth
We are able to use directives in two different way:
To use the default directive behaviour, you need to set APP_SECRET
environment variable, and that's all.
default
means, and what do I need to do?@isAuthenticated
- Just after you set environment variables, you need to have a valid JWT token and send it by Authorization
in the HTTP headers. That's all, the directive will check your token and throw an error if the token is invalid or expired.@hasRole
- Checks roles of an authenticated user. To use it correctly, inside your JWT token you should have the role
property with the correct role. If the user role doesn't match with the provided role, then directive will throw an error.
@hasRole
before checking role is doing authentication to get roles from JWT token.
import { AuthDirective } from 'graphql-directive-auth';
// or
const AuthDirective = require('graphql-directive-auth').AuthDirective;
// set environment variable, but in better way ;)
process.env.APP_SECRET = 'your_secret_key';
const schema = makeExecutableSchema({
typeDefs,
resolvers,
schemaDirectives: {
// to use @hasRole and @isAuthenticated directives
...AuthDirective(),
// custom name for @isAuthenticated
auth: AuthDirective().isAuthenticated,
// custom name for @hasRole
role: AuthDirective().hasRole,
},
});
If you need custom Authentication you can pass your authentication function to the main AuthDirective
functions. Your authentication function should return an object which will be available via context.auth
.
Authentication function signature:
context => {
// your logic here
// you should return an object
// this object will be passed inside your resolver
// it is available inside context via auth property
return {
user: {
id: 'your_user_id',
},
};
};
usage:
import { AuthDirective } from 'graphql-directive-auth';
// or
const AuthDirectives = require('graphql-directive-auth').AuthDirective;
const customAuth = AuthDirectives({
authenticateFunc: authenticateCustomFunc,
checkRoleFunc: checkRoleCustomFunc
});
const schema = makeExecutableSchema({
typeDefs,
resolvers,
schemaDirectives: {
// to use @hasRole and @isAuthenticated directives
...customAuth,
// custom name for @isAuthenticated
auth: customAuth().isAuthenticated,
// custom name for @hasRole
role: customAuth().hasRole,
},
resolver:
export default {
Query: {
me() (root, args, ctx){
const userId = ctx.auth.user.id; // your_user_id
},
},
};
Same as with the authenticate function, you can add your own logic to checking roles.
if you use
graphql-import
then you need to add this definition on top of the schema:
directive @isAuthenticated on FIELD | FIELD_DEFINITION
directive @hasRole(role: String) on FIELD | FIELD_DEFINITION
I would love to see your contribution. ❤️
For local development (and testing), all you have to do is to run yarn
and then yarn dev
. This will start the Apollo server and you are ready to contribute :tada:
Run yarn test (try --watch
flag) for unit tests (we are using Jest)
The MIT License (MIT) 2018 - Luke Czyszczonik - mailto:lukasz.czyszczonik@gmail.com
FAQs
GraphQL directive auth
We found that graphql-directive-auth demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
/Research
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
Security News
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.
Security News
/Research
Malicious Nx npm versions stole secrets and wallet info using AI CLI tools; Socket’s AI scanner detected the supply chain attack and flagged the malware.