Краткое поступление в OAuth с помощью Passport.js

kratkoe postuplenie v oauth s pomoshhyu passportjs?v=1656603366

Что такое OAuth?

OAuth (Open Authorization) – это протокол авторизации. Приложение третьей стороны может использовать его для доступа к данным пользователей с сайта (например, Google или Twitter), не раскрывая их пароль. Такие сайты, как Quora, Medium, AirBnb и многие другие, предлагают аутентификацию с помощью OAuth.

OAuth действительно упрощает нашу жизнь, устраняя необходимость запоминать пароль каждой учетной записи, которую вы создаете практически на любом сайте. Вам просто нужно запомнить основной пароль аккаунта вашего поставщика OAuth.

Что такое Passport.js?

Passport – это промежуточное программное обеспечение, реализующее аутентификацию в веб-приложениях на базе Express. Он предлагает более 500 стратегий. Что это за стратегия? Для аутентификации запросов используются стратегии. Каждая стратегия имеет свой пакет npm (например, passport-twitter, passport-google-oauth20). Перед использованием стратегию необходимо настроить.

Для чего использовать Passport.js?

Вот шесть причин, почему вы должны использовать паспорт:

  • Он легок
  • Легко настраивается
  • Поддерживает постоянные сеансы
  • Предлагает OAuth
  • Предоставляет отдельные модули для каждой стратегии.
  • Дает вам возможность реализовывать собственные стратегии.

Давайте что-нибудь построим

Для начала нам нужно установить паспорт от NPM:

npm install passport 

Мы собираемся создать простую программу, которая предоставляет пользователю доступ к секретному маршруту только если он войдет в систему. В этом учебнике я использую стратегию passport-google-oauth20. Не стесняйтесь использовать любую другую стратегию, которую вы предпочитаете, но обязательно проверьте документы, чтобы увидеть, как она настроена.

Прежде чем продолжить, нам нужны clientID и clientSecret. Чтобы получить его, выделите и создайте новый проект. Затем перейдите к разделу Включить API и службы и включите API Google+. Выберите API и нажмите кнопку «Создать учетные данные».

Заполните форму и используйте тот же URL обратного вызова как в форме, так и в своем файле. Обязательно прочтите комментарии к коду, чтобы понять, как все сочетается.

app.js

// Required dependencies 
const express = require('express');
const app = express();
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20');
const cookieSession = require('cookie-session');

// cookieSession config
app.use(cookieSession({
    maxAge: 24 * 60 * 60 * 1000, // One day in milliseconds
    keys: ['randomstringhere']
}));

app.use(passport.initialize()); // Used to initialize passport
app.use(passport.session()); // Used to persist login sessions

// Strategy config
passport.use(new GoogleStrategy({
        clientID: 'YOUR_CLIENTID_HERE',
        clientSecret: 'YOUR_CLIENT_SECRET_HERE',
        callbackURL: '
    },
    (accessToken, refreshToken, profile, done) => {
        done(null, profile); // passes the profile data to serializeUser
    }
));

// Used to stuff a piece of information into a cookie
passport.serializeUser((user, done) => {
    done(null, user);
});

// Used to decode the received cookie and persist session
passport.deserializeUser((user, done) => {
    done(null, user);
});

// Middleware to check if the user is authenticated
function isUserAuthenticated(req, res, next) {
    if (req.user) {
        next();
    } else {
        res.send('You must login!');
    }
}

// Routes
app.get('/', (req, res) => {
    res.render('index.ejs');
});

// passport.authenticate middleware is used here to authenticate the request
app.get(" passport.authenticate('google', {
    scope: ['profile'] // Used to specify the required data
}));

// The middleware receives the data from Google and runs the function on Strategy config
app.get('/auth/google/callback', passport.authenticate('google'), (req, res) => {
    res.redirect('/secret');
});

// Secret route
app.get('/secret', isUserAuthenticated, (req, res) => {
    res.send('You have reached the secret route');
});

// Logout route
app.get('/logout', (req, res) => {
    req.logout(); 
    res.redirect('/');
});

app.listen(8000, () => {
    console.log('Server Started!');
});

index.ejs

<ul>
    <li><a href="
    <li><a href="
    <li><a href="
</ul>

Как видите, мы создали a /secret маршрута и предоставлять к нему доступ, только если пользователь прошел аутентификацию. Чтобы проверить, аутентифицирован ли пользователь, мы создали промежуточное программное обеспечение, которое проверяет, есть ли в запросе объект пользователя. Наконец, для выхода мы использовали req.logout() способ, предусмотренный паспортом для очищения сессии.

Вот некоторые ресурсы, чтобы узнать больше о паспорте

Официальная документация Passport.js
Простая, ненавязчивая аутентификация для Node.jswww.passportjs.org

Вывод

Здесь мы увидели только одну стратегию. Есть еще 500+. Я настоятельно рекомендую вам просмотреть официальную документацию Passport и узнать, что они еще предлагают. Спасибо, что нашли время, чтобы прочитать это. Не стесняйтесь общаться со мной на LinkedIn, Twitter и GitHub. Я желаю вам успеха!

0*mgwlLYxIDy5weT3_
«Делайте то, что отлично, написано на мониторе компьютера». автор Мартин Шредер на Unsplash

Предыдущая статья

Быстрое вступление в Material Design с помощью Materialize
Что такое материальный дизайн?medium.freecodecamp.org

Добавить комментарий

Ваш адрес email не будет опубликован.