여권을 사용하여 KOA2에서 소셜 로그인을하려고합니다. passport.authenticate() 도움으로 사용자를 인증하려고 할 때. 그것은 실행되어야하고 fb 로그인 페이지로 나를 던져야하지만 그렇게하지는 않습니다. 심지어 그것이 발견되지 않고 어떤 종류의 오류도 던지지 않고 있음을 보여줍니다. 여기 내 코드 예제입니다 :passport.authenticate가 전혀 작동하지 않습니다
는
import Koa from 'koa'
import views from 'koa-views'
import serve from 'koa-static'
import rootRoutes from './routes/index'
import userRoutes from './routes/user'
import authConfig from './config/oauth'
import authRoutes from './routes/social'
const app = new Koa()
// trust proxy
app.proxy = true
// sessions
const convert = require('koa-convert')
const session = require('koa-generic-session')
const passport = require('koa-passport')
app.keys = ['your-session-secret']
// body parser
const bodyParser = require('koa-bodyparser')
// require('./auth')
app.use(bodyParser())
app.use(convert(session()))
// authentication
app.use(convert(passport.initialize()))
app.use(convert(passport.session()))
app.use(views(`${__dirname}/views`, { extension: 'html' }))
app.use(serve(`${__dirname}/public`))
app.use(authRoutes.routes())
app.use(authRoutes.allowedMethods())
app.use(rootRoutes.routes())
console.log("authRoutes", authRoutes);
app.use(rootRoutes.allowedMethods())
app.use(userRoutes.routes())
app.use(userRoutes.allowedMethods())
app.use(async (ctx, next) => {
try {
await next(); // next is now a function, await instead of yield
} catch (err) {
ctx.body = { message: err.message };
ctx.status = err.status || 500;
}
});
app.listen(1337,() => {
console.log('Server running at http://localhost:1337 and http://127.0.0.1:1337')
})
export default app
social.js
import Router from 'koa-router'
const router = new Router()
import authConfig from '../config/oauth'
import passport from 'koa-passport'
var user = { id: 1, username: 'test' }
passport.serializeUser((user, done) => {
console.log(user)
done(null, user);
});
passport.deserializeUser((id, done) => {
(async() => {
try {
// const user = await User.findById(id);
console.log("user", user);
done(null, user);
} catch (error) {
console.log("error")
done(error);
}
})();
});
var LocalStrategy = require('passport-local').Strategy
passport.use(new LocalStrategy(function(username, password, done) {
console.log("user", user);
// retrieve user ...
if (username === 'test' && password === 'test') {
done(null, user)
} else {
done(null, false)
}
}))
var FacebookStrategy = require('passport-facebook').Strategy
passport.use(new FacebookStrategy({
clientID: '214873665615110',
clientSecret: 'f30ba1c22c6fef150c4b8ffae3cbffe4',
callbackURL: 'http://127.0.0.1:1337/auth/facebook/callback'
},
function(token, tokenSecret, profile, done) {
console.log("profile", profile);
// retrieve user ...
done(null, user)
}
))
var TwitterStrategy = require('passport-twitter').Strategy
passport.use(new TwitterStrategy({
consumerKey: 'authConfig.twitter.consumerKey',
consumerSecret: 'authConfig.twitter.consumerSecret',
callbackURL: 'http://127.0.0.1:' + (process.env.PORT || 1337) + '/auth/twitter/callback'
},
function(token, tokenSecret, profile, done) {
// retrieve user ...
done(null, user)
}
))
var GoogleStrategy = require('passport-google-auth').Strategy
passport.use(new GoogleStrategy({
clientId: 'authConfig.google.clientID',
clientSecret: 'authConfig.google.clientSecret',
callbackURL: 'http://127.0.0.1:' + (process.env.PORT || 1337) + '/auth/google/callback'
},
function(token, tokenSecret, profile, done) {
// retrieve user ...
done(null, user)
}
))
// import authConfig from '../config/oauth'
router.post('/login', async(ctx, next) => {
console.log("login");
await passport.authenticate('local', {
successRedirect: '/about',
failureRedirect: '/'
})
return next();
})
router.get('/auth/facebook', async(ctx, next) => {
console.log("call aayi");
await passport.authenticate('facebook');
// ctx.body = "aa gaya bhai ";
})
router.get('/auth/facebook/callback', async(ctx, next) => {
passport.authenticate('facebook', {
successRedirect: '/about',
failureRedirect: '/'
})
})
export default router
oath.js
는 소셜 플러그인에 대한 자격 증명을 가지고있다을 app.js.
koa-router
대신 koa-route
을 사용할 때 흥미로운 문제가 있습니다. 효과가 있습니다. 같은 나머지
const route = require('koa-route');
app.use(route.get('/auth/facebook',
passport.authenticate('facebook')
))
app.use(route.get('/auth/facebook/callback',
passport.authenticate('facebook', {
successRedirect: '/app',
failureRedirect: '/'
})
))
모든 것은 단지이 두 경로에 대한 koa-route
을 사용하고는 잘 작동합니다.
대신에
npm install [email protected]
과 함께 설치해야합니다. 질문을 업데이트했습니다. –BTW와 똑같은 표현을 사용하면 어떻게 koa에서 어떤 문제를 만들 수 있습니까? 것은 우리가 최소한의 데이터를 세션에 저장해야한다는 것입니다. 그래서 우리는 user.id를 사용합니다 –