por example basada autenticacion authentication login local-storage passport.js angular-local-storage

authentication - basada - json web token example



Autenticación como usuario anónimo (2)

Me gustaría reproducir cómo Plunker administra las cuentas anónimas .

Plunker puede reconocer a un usuario anónimo. Por ejemplo, podemos guardar un plunker como anonym y luego freeze . Como resultado,

  1. solo el mismo usuario (antes de borrar el historial del navegador) tiene acceso completo a este plunker (por ejemplo, guardar una modificación, descongelar).

  2. si el mismo usuario lo abre en otro navegador u otros usuarios abren el mismo enlace, NO pueden save ninguna modificación; tienen que fork .

En mi sitio web, uso la estrategia local de passport.js para administrar usuarios nombrados. Por ejemplo,

router.post(''/login'', function (req, res, next) { if (!req.body.username || !req.body.password) return res.status(400).json({ message: ''Please fill out all fields'' }); passport.authenticate(''local'', function (err, user, info) { if (err) return next(err); if (user) res.json({ token: user.generateJWT() }); else return res.status(401).json(info); })(req, res, next); });

Y uso localStorage para almacenar el token. Por ejemplo,

auth.logIn = function (user) { return $http.post(''/login'', user).success(function (token) { $window.localStorage[''account-token''] = token; }) }; auth.logOut = function () { $window.localStorage.removeItem(''account-token''); };

¿Alguien sabe si passport.js tiene alguna estrategia o herramientas existentes para administrar la cuenta anónima como lo hace Plunker? De lo contrario, ¿hay una forma convencional de lograr esto?


Passport permite autenticación anónima. Hay una estrategia anónima de pasaporte para lo mismo:

app.get(''/'', // Authenticate using HTTP Basic credentials, with session support disabled, // and allow anonymous requests. passport.authenticate([''basic'', ''anonymous''], { session: false }), function(req, res){ if (req.user) { res.json({ username: req.user.username, email: req.user.email }); } else { res.json({ anonymous: true }); } });

Esto utiliza su estrategia básica en su lugar, puede sustituirla con una estrategia local si está utilizando la autenticación local. Se trata de una estrategia anónima en caso de que no se suministre nada, como se puede ver aquí:

passport.use(new BasicStrategy({ }, function(username, password, done) { // asynchronous verification, for effect... process.nextTick(function () { // Find the user by username. If there is no user with the given // username, or the password is not correct, set the user to `false` to // indicate failure. Otherwise, return the authenticated `user`. findByUsername(username, function(err, user) { if (err) { return done(err); } if (!user) { return done(null, false); } if (user.password != password) { return done(null, false); } return done(null, user); }) }); } )); // Use the BasicStrategy within Passport. // This is used as a fallback in requests that prefer authentication, but // support unauthenticated clients. passport.use(new AnonymousStrategy());

El ejemplo completo se puede encontrar aquí: - https://github.com/jaredhanson/passport-anonymous/blob/master/examples/basic/app.js


Recuerde que las cookies con una fecha de vencimiento más larga es cómo se identifica al usuario anónimo. Esto va del mismo modo que cualquier tecnología del lado del servidor que intenta autenticar al usuario por nombre de usuario y contraseña y luego simplemente establece una cookie para la solicitud http.