#node.js #passport.js #passport-github2
#node.js #passport.js #passport-github2
Вопрос:
Приведенный ниже код злится на меня. Я не вижу в этом ничего плохого.
function User(profile){
console.log(profile)
}
passport.use(
new GitHubStrategy({
clientID: "my_id",
clientSecret: "secret",
callbackURL: "http://localhost:3000/auth/github/callback",
},
function(accessToken, refreshToken, profile, done) {
User(profile),function (err, user) {
return done(err, user);
};
}
)
);
app.get(
"/auth/github",
passport.authenticate("github", { scope: ["user:email"] })
);
app.get(
"/auth/github/callback",
passport.authenticate("github", { failureRedirect: "/login" }),
function(req, res) {
// Successful authentication, redirect home.
res.redirect("/");
}
);
Он выдает большую ошибку каждый раз, когда я пытаюсь пройти аутентификацию. Пожалуйста, помогите.
Отредактировал вопрос и сделал так, как сказал @jasonandmonte, и теперь я понимаю это:
Комментарии:
1. Я не работал ни с одной из этих библиотек, но обычно с OAuth вам нужно обменять код аутентификации, который перенастроился при обратном вызове, на токен доступа и токен обновления. Вы делали это где-нибудь?
2. ну, я знаю, что эта часть выдает ошибку function(accessToken, refreshToken, profile, done) { User(profile),function (err, user) { return done(err, user); };
3. просто не знаю, почему
4. В документации я заметил одну вещь, которую он использует
User.findOrCreate()
вместоUser()
5. когда я использовал
User.findOrCreate
, он говорил, что User не определен, я не знаю, почему он так говорит
Ответ №1:
Проблема, которую я вижу, заключается в том, что вы определяете User
функцию, которая регистрирует только профиль. User
Функция в документации является примером модели базы данных, которая запрашивает базу данных и передает данные в обратный вызов.
Чтобы решить проблему и воспроизвести ее в примере how passport-github
, вам нужно будет использовать инструмент моделирования объектов, такой как Mongoose или Sequelize. Затем у вас будет доступ к чему-то похожему User.findOrCreate()
или просто User.find()
, если вы хотите ограничить создание учетной записи ролью администратора.
Однако, чтобы заставить passport работать до тех пор, пока вы не настроите подключение к базе данных, вы должны иметь возможность обновить обратный вызов стратегии для вызова done .
passport.use(
new GitHubStrategy({
clientID: "my_id",
clientSecret: "secret",
callbackURL: "http://localhost:3000/auth/github/callback",
},
function(accessToken, refreshToken, profile, done) {
done(null, profile.id);
}
)
);
Комментарии:
1. спасибо @jasonandmonte. сделал, как вы сказали, и теперь я получаю новую ошибку.
2. Как выглядит ваш файл express app? Вам необходимо использовать
passport.initialize()
промежуточное программное обеспечение в вашем приложении express. Если это звучит непривычно, я бы рекомендовал просмотреть учебное пособие passport oauth 2.0 или пример кода , чтобы посмотреть на более полную настройку для passport.