2015-08-22 14 views
7

Im cercando di fare una variabile globale denominata theuser Quale contiene l'userinfo se loggatoFare un utente collegato variabile in AngularJS + laravel

Ho provato a mettere nel mio SPA file php:.

app.value('theUser', '<?php echo Auth::user(); ?>'); 

E funziona, ma solo dopo la pagina di aggiornamento. (Login avviene tramite angularjs una richiesta $ http a auth/login rendimenti wich USERINFO se loggato logica +)

Nel mio angolare autenticazione app, ho fatto questo:

var login = $http.post("auth/login", sanitizeCredentials(credentials)).success(function(data) { 
    theUser = data; 
    $rootScope.theUser = theUser; 
    }); 

e che funziona, ma solo quando l'utente esegue l'accesso. Se aggiorno, l'utente è vuoto. E non posso ottenere queste due soluzioni per lavorare insieme. Probabilmente ho bisogno di un altro approccio.

Tutto quello che voglio è una variabile utente a cui posso accedere da qualsiasi punto della mia app, , che è impostata se l'utente accede o ha effettuato l'accesso in precedenza. Utilizzo di Laravel 5.1.

Ecco il mio auth JS servizio applicazione: http://pastebin.com/HcdLaZcD

Qualcuno mi può risolvere? Grazie.

+0

Attualmente in grado di verificare se aiuta la vostra situazione specifica, ma con l'aiuto di https://scotch.io/tutorials/token-based-authentication-for-angularjs-and-laravel-apps Ho creato una piccola applicazione intranet con un oggetto utente simile che rimane aggiornata dopo l'accesso ma recuperandola ogni volta che un utente visita la pagina delle impostazioni. –

+0

ricaricare la pagina dopo aver effettuato l'accesso. – samir

risposta

2

per l'accesso al utente collegato dai file JavaScript, si può provare qualcosa di simile (Create un view composer, anche layouts.master dettami layouts/master.blade.php):

View::composer('layouts.master', function($view) { 
    $user = null; 
    if(Auth::check()) { 
     $user = Auth::user(); 
    } 

    $view->with('authUser', $user); 
}); 

Nel layout maestro provare questo (Così User volontà variabile essere disponibile come JS oggetto se l'utente è connesso):

<head> 
    <script>var User = {{ $authUser or 'undefined' }}</script> 
</head> 

Questa è solo un'idea, la sua attuazione in base alle proprie ne ed. Inoltre, è possibile utilizzare uno spazio dei nomi come App.user. Ho scritto un articolo su questo anno di lasr, è possibile check it here. A proposito, era per Laravel 4.x.

.

2

Abbiamo utilizzato la memoria locale html5 per superare questo problema una volta che l'utente ha effettuato l'accesso, è sufficiente inserire le informazioni dell'utente nella memoria locale di html5 (funziona su tutti i browser, anche su dispositivi mobili).

Ha alcuni svantaggi che è necessario superare e anche avere un certo controllo sui filtri dei percorsi per evitare che qualcuno carichi pagina che non dovrebbero essere autorizzati a vedere.

Ma temo che la mia risposta si applichi meglio alla nostra soluzione e non penso che questa risposta sia perfetta ma potrebbe guidarvi in ​​una soluzione migliore. La nostra app pubblica un'API per l'uso di angular e questo angolare è in qualche modo dotato di alcune estensioni per facilitare il routing.

+0

Come assicurarsi che la sessione non venga scaricata. –

+0

Questo è uno dei migliori punti sull'utilizzo di chiamate API a un endpoint di riposo e implementato in laravel. In angolare basta controllare se la risposta http ha uno stato HTTP di 401, in laravel ho solo controllato se l'utente è autenticato e in caso contrario, risposta con quel codice di stato 401. Quindi gestirlo deviando il routing angolare al accedi di nuovo (e fai un po 'di pulizia della sessione) – amk

4

Perché non utilizzare PHP-Vars-To-Js-Transformer da Laracasts.Poi ogni volta che un User log in, è possibile impostare una variabile Sessionauth_user e quindi ottenere quella variabile a JavaScript come mostrato di seguito (nel vostro laravel [email protected]):

... 
\Session::put('auth_user', \Auth::user()); 

JavaScript::put([ 
    'theUser' => \Session::get('auth_user') 
]); 
... 

E quando il User disconnette: \Session::forget('auth_user');

La variabile theUser sarà disponibile ovunque nel tuo JavaScript (o puoi anche Namespace, controlla il link Github sopra).

3

sulla parte superiore della pagina, sotto tag script

window.user = <?php echo Auth::user(); ?> 

e

app.value('theUser',window.user); 

app.run(function ($rootScope, theUser) { 

     $rootScope.theUser = theUser; 

});