2014-06-13 2 views
11

Sto facendo un'applicazione angolare con backend loopback strongloop.Accesso da Facebook in app angolare con backend loopback

Inoltre, ho integrato un accesso di terze parti tramite Facebook utilizzando il modulo loopback-passport.

tutto andava bene in loopback-esempio-passaporto e tutto è a posto nella mia app proprio prima del momento del reindirizzamento alla mia app. Utente e token di accesso creati.

il codice:

app.get('/auth/login', ensureLoggedIn('/#login'), function(req, res, next) { 
    console.log('LOOGED IN!!'); 
console.log(req.user); 

    res.redirect('/#auth/login'); 
}); 

funziona bene. Ma non riesco a capire. come dare lo stato autenticato alla mia applicazione angolare.

Ho provato a fare un controller per instradare '/ # auth/login':

.controller('AuthCalbackCtrl', function($scope, $cookies, $location, AppAuth, $http, User, LoopBackAuth) { 
//analogue of User.login responce interceptor 
    LoopBackAuth.currentUserId = $cookies['userId'] || null; 
    LoopBackAuth.accessTokenId = $cookies['access-token'] || ''; 
    LoopBackAuth.rememberMe = false; 
    LoopBackAuth.save(); 
    //asking for currentUser 
    User.getCurrent(function(user) { 
    console.log('ser.getCurrent ', user); 
    }); 
    $location.path('/'); 
    }) 

Questo codice fa una richiesta GET/api/utenti/2, ma riceve 401 errore.

Se io modificare il file di /loopback/lob/models/user.js impostazione di autorizzazione:

principalType: ACL.ROLE, 
    // principalId: Role.OWNER, 
    principalId: Role.EVERYONE, 
    permission: ACL.ALLOW, 
    property: "findById" 

Poi la richiesta GET/API/utenti/2 riceve 200 e tutto ok.

Sono un po 'confuso. Non riesco a capire come rendere autenticabile la mia app angolare al loopback, anche se conosco access-token e userId

Qualcuno ha qualche idea su come farlo?

risposta

8

Ecco un codice valido.

app.get('/auth/login', function(req, res, next) { 
    //workaround for loopback-password 
    //without this angular-loopback would make incorrect authorization header 
    res.cookie('access-token', req.signedCookies['access-token']); 
    res.cookie('userId', req.user.id); 
    res.redirect('/#auth/login'); 
}); 

Il problema è che i segni di loopback-passaporto biscotto:

  res.cookie('access-token', info.accessToken.id, { signed: true, 
      maxAge: info.accessToken.ttl }); 

In stringa sembra qualcosa come il seguente "s: .eBvo8bpo9Q9wnNrPjjlG% 2FAcYqWkxEgNFqn% 2FO54rdGwY"

Ma loopback-angolare copia il token di accesso su header.authorization, quindi dobbiamo inserire un semplice cookie.

+0

Qualcuno avrebbe in mente di condividere un'applicazione di esempio per questo? Grazie! – imesh