node.js - node - passport local
Passport.js: estrategia de pasaporte-facebook-token, inicio de sesión a través de JS SDK y THEN autentica el pasaporte? (1)
He pasado un par de días esta semana tratando de encontrar la mejor manera de usar la autenticación de Facebook para una API privada, usando passport.js - passport-facebook-token es perfecto para esto.
Tiene razón al suponer que estas son dos estrategias de autenticación separadas. No necesitas tener instalado el pasaporte-facebook para usar el pasaporte-facebook-token.
Si tiene la autenticación de Facebook implementada en el JS del lado del cliente (o iOS, etc.) y está buscando una manera de autenticar las solicitudes de API utilizando la autenticación de Facebook del usuario, el pasaporte-facebook-token es una solución realmente elegante.
passport-facebook-token funciona de forma totalmente independiente de passport-facebook, y básicamente maneja las redirecciones requeridas por Facebook internamente, antes de pasar la solicitud a su controlador.
Por lo tanto, para autenticar una ruta de API utilizando el pasaporte-facebook-token, deberá configurar una estrategia de pasaporte de este modo:
passport.use(''facebook-token'', new FacebookTokenStrategy({
clientID : "123-your-app-id",
clientSecret : "ssshhhhhhhhh"
},
function(accessToken, refreshToken, profile, done) {
// console.log(profile);
var user = {
''email'': profile.emails[0].value,
''name'' : profile.name.givenName + '' '' + profile.name.familyName,
''id'' : profile.id,
''token'': accessToken
}
// You can perform any necessary actions with your user at this point,
// e.g. internal verification against a users table,
// creating new user entries, etc.
return done(null, user); // the user object we just made gets passed to the route''s controller as `req.user`
}
));
Vale la pena señalar que el método User.findOrCreate
utilizado en el Readme de pasaporte-facebook-token no es un método predeterminado de mongo / mongoose, sino un complemento que deberá instalar si lo desea.
Para utilizar esta estrategia de autenticación como middleware para cualquiera de sus rutas, deberá pasarle un objeto access_token
como un parámetro de URL o como una propiedad del cuerpo de la solicitud.
app.get(''/my/api/:access_token/endpoint'',
passport.authenticate([''facebook-token'',''other-strategies'']),
function (req, res) {
if (req.user){
//you''re authenticated! return sensitive secret information here.
res.send(200, {''secrets'':[''array'',''of'',''top'',''secret'',''information'']});
} else {
// not authenticated. go away.
res.send(401)
}
}
NÓTESE BIEN. La propiedad access_token
entre mayúsculas y minúsculas y utiliza un guión bajo. La documentación para el pasaporte-facebook-token no es extensa, pero la fuente está muy bien comentada y es bastante fácil de leer, por lo que le recomiendo que eche un vistazo debajo del capó. Sin duda, me ayudó a comprender algunas de las formas más generales en que funciona el pasaporte.
Estaba buscando una manera de permitir que mi cliente autorice con el JS SDK de Facebook y luego de alguna manera transfiera esta autorización a mi servidor de nodo (para que pueda verificar las solicitudes con la API de gráficos de fb)
Me encontré con: https://github.com/jaredhanson/passport-facebook/issues/26
Y
https://github.com/drudge/passport-facebook-token
Lo que parece ser una estrategia completamente diferente de pasaporte-facebook.
Estoy en lo correcto cuando asumo que:
¿Uno inicia sesión con el SDK de fb JS y luego la estrategia de token de facebook extrae de alguna manera el token y el ID de fb del documento o del objeto del cuerpo?
¿O hay alguna otra manera decente de lograr esto? Estoy tratando de evitar las redirecciones impuestas por los SDK del servidor