discord-authorize
Version:
A node module for easy authentication with Discord
170 lines (117 loc) • 5.28 kB
Markdown
# discord-authorize: Simplifying Discord Authentication with a Node Module
## Introduction
`discord-authorize` is a powerful Node.js module that streamlines the process of authenticating users with Discord through OAuth2. This document provides a comprehensive guide on how to install, set up, and effectively utilize this module for seamless Discord authentication.
## Installation
To get started, install the latest version of `discord-authorize` using npm:
```sh
npm install discord-authorize@latest
```
## Usage (JavaScript)
### Setup
Begin by importing the necessary components from the `discord-authorize` module and initializing a new instance of `DiscordAuthorization`.
```js
const { DiscordAuthorization, Scopes } = require("discord-authorize");
const discord = new DiscordAuthorization({
clientId: "YOUR_CLIENT_ID",
clientSecret: "YOUR_CLIENT_SECRET",
redirectUri: "YOUR_REDIRECT_URI",
});
```
### Generating Authorization Link
Generate an OAuth2 authorization link by calling the `generateOauth2Link()` method, which creates a URL for users to grant permissions. This function requires scope(s) and a unique state parameter.
```js
const scopes = [Scopes.Identity, Scopes.Email];
const state = "UNIQUE_STATE_IDENTIFIER";
const authorizationLink = discord.generateOauth2Link({ scopes: scopes }, state);
```
### Handling Tokens
Upon successful authorization, you'll receive a code through the redirect URI's query parameter. Exchange this code for access and refresh tokens using the `exchangeCodeForTokens()` method. Here's an example using Express.js:
```js
app.get("/auth/callback", async (req, res) => {
const code = req.query.code;
const tokens = await discord.exchangeCodeForTokens(code);
res.cookie("access_token", tokens.accessToken);
res.cookie("refresh_token", tokens.refreshToken);
res.redirect("/");
});
```
### Setting Tokens
Use the `setAccessToken()` and `setRefreshToken()` methods to set the access and refresh tokens for subsequent requests. Here's how you can do this:
```js
discord.setAccessToken(req.cookies.access_token);
discord.setRefreshToken(req.cookies.refresh_token);
```
### Authorized User's Information
Retrieve authorized user information through the `getMyInfo()` method, which returns a user object. Here's an example:
```js
const myInfo = await discord.getMyInfo();
console.log(myInfo);
```
### Authorized User's Connections
If you require information about a user's connections, remember to include the `Connections` scope while generating the OAuth2 link. Subsequently, utilize the `getMyConnections()` method to retrieve the connections.
```js
const myConnections = await discord.getMyConnections();
const connectionInfo = myConnections.map((connection) => ({
name: connection.name,
type: connection.type,
verified: connection.verified,
}));
```
The `getMyConnections()` method provides the following data structure:
```ts
id: string;
name: string;
type: string;
friend_sync: boolean;
metadata_visibility: number;
show_activity: boolean;
two_way_link: boolean;
verified: boolean;
visibility: number;
```
### Joining a guild
This module is nothing without the `joinGuild()` method. To join a guild, you can use `joinGuild()` method. The method expects `GuildJoinOptions` which has:
```ts
guildId: snowflake;
userId: snowflake;
roles: snowflake[] | undefined;
```
This method requires a client (bot) in order to join a server.
Now let's see the an usage of it:
```js
const discord = new DiscordAuthorize({
clientId: "YOUR_CLIENT_ID",
clientSecret: "YOUR_CLIENT_SECRET",
redirectUri: "YOUR_REDIRECT_URI",
clientToken: "YOUR_BOT_TOKEN",
});
const response = await discord.joinGuild({
guildId: "1148367209371021341",
userId: "1074981842886864891",
});
res.json(response);
```
### Get Authorized User's Guild and it's information
With the `getGuilds()` function, we can get the information about what guild we are in and the information about the guilds we are in. Let's see an example of using it in the code below:
```js
const guilds = await discord.getGuilds();
res.json(guilds);
```
Now how to count the guild? We can do this manually but `discord-authorize` module provides builtin utility function to do it.
```js
const { Utils } = require("discord-authorize");
const guilds = await discord.getGuilds();
res.json({
totalGuilds: Utils.totalGuildCount(guilds),
});
```
### Refreshing Access Tokens
To manage token expiration, use the `refreshToken()` method. This function revokes the current access token and provides a new one, ensuring uninterrupted access. Here's how you can do it:
```js
const newAccessToken = await discord.refreshToken();
res.cookie("access_token", newAccessToken.access_token);
```
### Full code
If you want the full code visit [this](https://github.com/codeblitz97/discord-authorize/blob/main/test/index.js)
## Conclusion
`discord-authorize` simplifies Discord authentication in Node.js applications. By following this guide, you can effortlessly integrate Discord authentication, user information retrieval, and token management into your projects.