UNPKG

passport-telegram-official

Version:

Telegram (not official, just the name) authentication strategy for Passport (https://core.telegram.org/widgets/login)

58 lines (46 loc) 1.57 kB
const express = require('express'); const bodyParser = require('body-parser'); const passport = require('passport'); const TelegramStrategy = require('..').TelegramStrategy; const throwError = () => { throw new TypeError('Please provide your credentials through BOT_TOKEN and BOT_NAME envivroment variable. Also set PORT to 80, because widget won\'t work otherwise.') }; const botToken = process.env.BOT_TOKEN || throwError(); const botName = process.env.BOT_NAME || throwError(); passport.deserializeUser((user, done) => { done(null, user); }); passport.serializeUser((user, done) => { done(null, user); }); passport.use(new TelegramStrategy({ botToken: botToken, passReqToCallback: true }, (req, user, done) => { console.log(user); req.user = user; done(null, user) })); const app = express(); // Here we create page with auth widget app.get('/', (req, res) => { res.send(`<html> <head></head> <body> <div id="widget"> <script async src="https://telegram.org/js/telegram-widget.js?2" data-telegram-login="${botName}" data-size="medium" data-auth-url="/login" data-request-access="write" ></script> </div> </body> </html>`); }); app.use(bodyParser.urlencoded({ extended: true })); app.use(passport.initialize()); app.use('/login', passport.authenticate('telegram'), (req, res) => { res.send(`You logged in! Hello ${req.user.first_name}!`); }); const port = process.env.PORT || 4600; app.listen(port, () => { console.log(`Go to localhost:${port} and try to login`) });