lculver
@lculver
web-программист

Как авторизироваться с jwt на сервере node.js?

Я c node.js впервые (работаю с php и js). Нужно прикрутить авторизацию на сайт управляемый node.js через другой сайт. Исходники лежат здесь https://github.com/chsasank/outline-wiki-docker-compose. Для авторизации используется passport.js. Добавил форму авторизации и стратегию:
import passport from "@outlinewiki/koa-passport";
import Router from "koa-router";
import errorHandling from "../../../middlewares/errorHandling";
import methodOverride from "../../../middlewares/methodOverride";
import validation from "../../../middlewares/validation";
import { User, Team } from "../../../models";
import accountProvisioner from "../../../commands/accountProvisioner";
import { signIn } from "../../../utils/authentication";
import util from "util";

const router = new Router();

export const config = {
  name: "mysiteauth",
  enabled: true,
};

router.use(methodOverride());
router.use(validation());

function Strategy(verify) {
	passport.Strategy.call(this);
	this.name = 'mysiteauth';
	this._verify = verify;
}
util.inherits(Strategy, passport.Strategy);

Strategy.prototype.authenticate = function (req) {
	var self = this;
	function verified(err, user, info) {
		if (err) {
			return self.error(err);
		}
		if (!user) {
			return self.fail(info);
		}
//		self.success(user, info); // при включении этой строки возникает ошибка
	}

	try {
		self._verify(req, verified);
	} catch (ex) {
		return self.error(ex);
	}
};

passport.serializeUser(function(user, done) {
  done(null, user);
});

passport.deserializeUser(function(user, done) {
  done(null, user);
});

passport.use(new Strategy(
	async function(req, done) {
		// здесь потом будет запрос к основному сайту о соответствии логина паролю

		try {
			const result = await accountProvisioner({
				ip: req.ip,
				team: {
					name: 'mysite',
					domain: 'mysite.ru',
					subdomain: 'mysite',
				},
				user: {
					name: req.body.login,
					email: 'test@mail.ru',
					isAdmin: false,
				},
				authenticationProvider: {
					name: "mysiteauth",
					providerId: 'mysite.ru',
				},
				authentication: {
					scopes: ["read"],
					providerId: "11112021",
				},
			});
			return done(null, result.user, result);
		} catch (err) {
			return done(err, null);
		}
	}
));
router.post("mysiteauth", passport.authenticate('mysiteauth'));
export default router;

Функции отрабатывают, но авторизация не происходит. Я не пойму, что нужно добавить и куда?
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы