2014-10-08 14 views
5

Sto creando un'app utilizzando Laravel e creando una piccola API interna per connettersi a un frontend angolare.Autent Angular contro il backend Laravel

Ho l'autenticazione automatica, ma volevo assicurarmi che questo sia un modo accettabile per accedere a un utente e per assicurarsi che tutto sia sicuro.

sessioni del controller:

public function index() { 
    return Response::json(Auth::check()); 
} 


public function create() { 
    if (Auth::check()) { 
     return Redirect::to('/admin'); 
    } 
    return Redirect::to('/'); 
} 

public function login() { 

    if (Auth::attempt(array('email' => Input::json('email'), 'password' => Input::json('password')))) { 
     return Response::json(Auth::user()); 
     // return Redirect::to('/admin'); 
    } else { 
     return Response::json(array('flash' => 'Invalid username or password'), 500); 
    }  
} 

public function logout() { 
    Auth::logout(); 
    return Response::json(array('flash' => 'Logged Out!')); 
} 

laravel Percorso:

Route::get('auth/status', '[email protected]'); 

angolare di fabbrica:

app.factory('Auth', [ "$http", function($http){ 


var Auth = {}; 

Auth.getAuthStatus = function() { 
    $http({ 
     method: "GET", 
     url: "/auth/status", 
     headers: {"Content-Type": "application/json"} 
    }).success(function(data) { 
     if(!data) { 
     console.log('Unable to verify auth session'); 
     } else if (data) { 
      console.log('successfully getting auth status'); 
      console.log(data);    

      // return $scope.categories; 
      Auth.status = data; 
      return Auth.status; 
     } 
    }); 

} 

return Auth; 

} 

]); 

Vorrei quindi essenzialmente avvolgere l'intera applicazione in qualcosa come un "AppController" e dichiarare la dipendenza "Auth" come dipendenza. Quindi posso chiamare Auth.getAuthStatus() e nascondere/mostrare le cose in base allo stato dell'utente poiché questo sarà essenzialmente SPA.

Mi rendo conto inoltre di nascondere l'URI/auth/status dall'essere visualizzato/colpito da chiunque e mi chiedevo come farlo. Una specie di domanda generale, ma qualsiasi intuizione sarebbe molto apprezzata. Grazie.

risposta

9

Ottima domanda. Ho già risposto a questa stessa domanda, quindi dirò la stessa cosa.

L'autenticazione è un po 'diversa nelle ZPS perché si separa quasi completamente l'app Laravel e Angular. Laravel si occupa di convalida, logica, dati, ecc.

Consiglio vivamente di leggere l'articolo collegato in fondo.

È possibile utilizzare i filtri di percorso di Laravel per proteggere i percorsi da utenti non autorizzati. Tuttavia, dal momento che la tua applicazione Laravel è ora diventata solo un endpoint, il framework di frontend eseguirà il lavoro pesante fino all'autenticazione e all'autorizzazione.

Una volta impostati i filtri di route, ciò non impedisce agli utenti autorizzati di tentare di eseguire azioni che non sono autorizzati a fare.

Cosa voglio dire con quanto sopra è per esempio:

Hai un endpoint API:/API/v1/utenti/159/modificare

Il punto finale è uno dei RESTful 7, e può essere usato per modificare un utente. Qualsiasi ingegnere o sviluppatore di software sa che si tratta di un endpoint RESTful e, se autorizzato dalla propria applicazione, potrebbe inviare una richiesta con dati a tale endpoint.

Si desidera che l'utente 159 sia in grado di eseguire questa azione o gli amministratori.

Una soluzione a questo è ruoli/gruppi/permessi qualunque si voglia chiamarli. Imposta le autorizzazioni dell'utente per la tua applicazione nella tua applicazione Angular e forse memorizza quei dati nel token emesso.

Leggi questo fantastico articolo (in AngularJS) su come autenticare/autorizzare correttamente utilizzando i framework JavaScript di frontend.

articolo: https://medium.com/opinionated-angularjs/techniques-for-authentication-in-angularjs-applications-7bbf0346acec

+0

Ho visto questo articolo, proprio non riusciva a rendersi conto a prima vista come utile e ben scritto che è.Grazie mille Noah. – cpk

+1

Nessun problema, felice di poterti aiutare. –

+0

Un'altra domanda di follow-up. Capisco come funziona tutto questo, ma come posso mantenere lo stato di login tra le schede del browser o le nuove finestre/visite successive? Dovrei solo verificare la presenza di laravel nel servizio "Sessione". Tutto sta iniziando a fare clic ... grazie ancora – cpk