В этом блоге я продемонстрирую, как реализовать Slack OAuth с помощью Node и Passport JS. Для реализации этого мы будем использовать стороннюю библиотеку под названием Passport JS. Passport JS - это промежуточное ПО для аутентификации для Node и Express JS. Passport JS можно использовать с любыми приложениями Express JS. Passport JS предоставляет более 500 стратегий.
Таблица содержания
- Инициализировать проект узла JS
- Создание идентификатора клиента Slack OAuth
- Настроить Slack OAuth
- Защита маршрутов и добавление выхода
- Инициализировать проект 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:
Удачного кодирования!