Felhasználók bejelentkeztetése a beépített munkamenet-hitelesítéssel
Függvény helyett az AUTH(options) opcióobjektumot fogad, és teljes cookie-munkamenet hitelesítést telepít:
- a
secretaláírja a cookie-t, acookiea neve, azexpirepedig azt adja meg, mennyi ideig marad egy munkamenet a memóriában aktivitás nélkül - az
onread(meta, next, $)betölti a felhasználót, ha érvényes cookie érkezik egy olyan munkamenetről, amely nincs a memóriában (például újraindítás után); hívd anext(null, user)-t, vagy anext('not found')-ot az elutasításhoz. Itt ellenőrizd, hogy a munkamenet még létezik-e a saját tárolódban, különben egy lemásolt cookie tovább működik, miután a felhasználó kijelentkezett - az
onlogout(session)és azonremove(sessionid)akkor fut, amikor egy munkamenetet eltávolítanak: töröld a saját tárolódból - az
options.authcookie($, sessionid, userid, expiration)bejelentkezteti a felhasználót: az aláírt cookie-t a válaszba írja - az
options.logout($)eltávolítja a munkamenetet és a cookie-t
Tartsd az opcióobjektumot egy változóban: ez a fogantyú, amellyel be- és kijelentkeztetsz felhasználókat. Ezután a $.user be van állítva, és a + és - útvonalak úgy működnek, mint az AUTH receptben.
var users = {
'1': { id: '1', name: 'Anna', password: 'secret' }
};
// sessionid -> userid. In a real app this is a database table.
MAIN.sessions = {};
MAIN.auth = {
secret: 'change-this-secret',
cookie: 'forge_session',
expire: '1 day',
onread: function(meta, next) {
var user = users[MAIN.sessions[meta.sessionid]];
user ? next(null, { id: user.id, name: user.name }) : next('session not found');
},
onlogout: function(session) {
delete MAIN.sessions[session.sessionid];
},
onremove: function(sessionid) {
delete MAIN.sessions[sessionid];
}
};
AUTH(MAIN.auth);exports.install = function() {
ROUTE('POST /login/', login);
ROUTE('+POST /logout/', logout);
ROUTE('+GET /me/', me);
};
function login($) {
var user = $.body.id && $.body.id === '1' && $.body.password === 'secret' ? { id: '1', name: 'Anna' } : null;
if (!user) {
$.invalid(401);
return;
}
var sessionid = UID();
MAIN.sessions[sessionid] = user.id;
MAIN.auth.authcookie($, sessionid, user.id, '1 day');
$.json({ name: user.name });
}
function logout($) {
MAIN.auth.logout($);
$.json({ ok: true });
}
function me($) {
$.json({ name: $.user.name });
}