Я 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;
Функции отрабатывают, но авторизация не происходит. Я не пойму, что нужно добавить и куда?