В этом блоге я продемонстрирую, как реализовать Slack OAuth с помощью Node и Passport JS. Для реализации этого мы будем использовать стороннюю библиотеку под названием Passport JS. Passport JS - это промежуточное ПО для аутентификации для Node и Express JS. Passport JS можно использовать с любыми приложениями Express JS. Passport JS предоставляет более 500 стратегий.



Таблица содержания

  1. Инициализировать проект узла JS
  2. Создание идентификатора клиента Slack OAuth
  3. Настроить Slack OAuth
  4. Защита маршрутов и добавление выхода
  5. Инициализировать проект JS узла

Сначала давайте создадим новый проект Node js. Приведенные ниже команды создают новую папку, а затем инициализируют узел для нашего проекта.

mkdir slack_passport
cd slack_passport/
npm init -y
touch index.js

Теперь установите необходимые пакеты:

npm i express cookie-session passport passport-slack

После установки скопируйте приведенный ниже код в свой index.js файл.

index.js

const express = require('express')
const app = express()
app.get('/',(req,res)=>{
  res.send('Hello world')
})
app.listen(8000,()=>{
  console.log('Serve is up and running at the port 8000')
})

Теперь запустите сервер, используя node index.js. Затем перейдите по адресу http: // localhost: 8000 /. Вы должны увидеть в браузере сообщение Hello world.

2. Создание идентификатора клиента OAuth для Slack

Прежде чем использовать стратегию аутентификации Slack для паспорта, вы должны зарегистрировать свое приложение или веб-приложение в Slack. Для этого выполните следующие действия.

Перейдите по ссылке:



По ссылке вы попадете в панель управления разработчика Slack. Теперь нажмите кнопку «Создать приложение», чтобы создать новое Slack-приложение.

После создания нового приложения вы будете перенаправлены на новую страницу, где сможете увидеть учетные данные приложения. Запишите те учетные данные, которые мы будем использовать в нашем коде.

Также не забудьте изменить URL переадресации. Перейдите в раздел OAuth and Permissions и измените URL-адрес перенаправления. URL-адрес будет нашим URL-адресом обратного вызова.

3. Настройте Slack OAuth.

Теперь давайте приступим к интеграции Slack Authentication с нашим проектом. Для этого я создаю новый файл с именем passport.js, который содержит учетные данные, которые мы создали на странице OAuth в Slack.

passport.js

const passport = require('passport');
const SlackStrategy = require('passport-slack').Strategy;
passport.serializeUser(function(user, done) {
  done(null, user);
});
passport.deserializeUser(function(user, done) {
  done(null, user);
});
passport.use(new SlackStrategy({
  clientID: "34******************61",
  clientSecret: "7f6***************************dea",
  callbackURL: "http://localhost:8000/auth/slack/callback",
  skipUserProfile: false,
  scope: ['identity.basic', 'identity.email', 'identity.avatar',  'identity.team'] // default
},
function(accessToken, refreshToken, profile, done) {
  return done(null, profile);
}
));

Скопируйте и вставьте приведенный ниже код в свой index.js файл.

Маршрут /auth/slack перенаправляет клиента на страницу входа в Slack.

Маршрут /auth/slack/callback будет действовать как URL-адрес обратного вызова, который будет вызываться в случае успешной аутентификации Slack.

Маршрут /ath/error будет вызываться, если во время аутентификации Slack произошла какая-либо ошибка.

index.js

const express = require('express')
const app = express()
const cookieSession = require('cookie-session')
const passport = require('passport');
require('./passport')
app.use(cookieSession({
  name: 'amazon-auth-session',
  keys: ['key1', 'key2']
}))
app.use(passport.initialize());
app.use(passport.session());
app.get('/',(req,res)=>{
  res.send(`Hello world ${req.user.displayName}`)
})
app.get('/auth/error', (req, res) => res.send('Unknown Error'))
app.get('/auth/slack',passport.authenticate('slack',{scope: ['profile']}));
app.get('/auth/slack/callback',passport.authenticate('slack', { failureRedirect: '/auth/error' }),
function(req, res) {
  res.redirect('/');
});
app.listen(8000,()=>{
    console.log('Serve is up and running at the port 8000')
})

Теперь перейдите по адресу http: // localhost: 8000 / auth / slack. Вы будете перенаправлены на страницу входа в Slack. После входа в свою учетную запись Slack вы будете перенаправлены обратно на нашу веб-страницу, и вы увидите свое имя пользователя Slack, отображаемое на нашей веб-странице.

4. Защита маршрутов и добавление выхода

Теперь давайте добавим промежуточное ПО, чтобы увидеть, вошел ли пользователь в систему или нет. Для этого я создаю файл с именем auth.js в папке промежуточного программного обеспечения.

Middleware/auth.js

const isLoggedIn = (req, res, next) => {
  if (req.user) {
    next(); 
  } else {
    res.status(401).send('Not Logged In');
  }
}
module.exports = isLoggedIn

После этого передайте промежуточное ПО по маршруту /. Теперь перейдите к URL http://localhost:8000/.. Вы автоматически будете перенаправлены на /auth/slack маршрут.

Теперь давайте создадим функцию для выхода. Просто вызвав функцию req.logout(), вы можете выйти из учетной записи Slack.

index.js

const isLoggedIn = require('./Middleware/auth')
app.get('/',isLoggedIn,(req,res)=>{
  res.send(`Hello world ${req.user.displayName}`)
})
app.get('/logout', (req, res) => {
  req.session = null;
  req.logout();
  res.redirect('/');
})

Перейдите по адресу http: // localhost: 8000 / logout. Вы выйдете из системы.

Не стесняйтесь обращаться ко мне по любым вопросам.

Электронная почта: [email protected].

Linkedin: https://www.linkedin.com/in/sjlouji/

Полный код на моем GitHub:



Удачного кодирования!