2013-09-24 20 views
5

Il progetto al momento sto lavorando è suddiviso in una console di amministrazione e il frontend normale. Sia front e backend si trovano nella stessa istanza di Laravel.Più sessioni di autenticazione in Laravel 4

Nel frontend sto provando a creare un sistema di accesso utente che funzioni esclusivamente per il frontend. Utilizza una tabella e un modello diversi e ha relazioni diverse in base al modello Utente per l'amministratore.

Quello che non riesco a capire è un modo per utilizzare la classe Auth Laravel per entrambi i sistemi. Logicamente Auth utilizza un singolo file di configurazione e più al punto, un nome di sessione.

Una soluzione che è stata avanzata non è quella di utilizzare una tabella e un modello diversi e utilizzare una qualche forma di acl per la distinzione. Ma non mi piace l'idea di mixare frontend e backend in questo modo. Soprattutto perché significherebbe che dovrei improvvisamente fornire al modello User amministratore tutti i campi e le relazioni precedentemente univoci per l'utente del frontend.

Non sembra il modo giusto di fare le cose. Potrei passare a un diverso sistema di autenticazione o separare l'amministratore in un pacchetto con le proprie configurazioni, ma l'ambito del progetto non consente tali cambiamenti di tempo.

Sarei felice di dare qualche idea.

+1

questo potrebbe essere helful http://stackoverflow.com/questions/18785754/laravel-4-need-to-auth-with-2-different-tables – cyvvilek

risposta

5

Questo è un problema che ho incontrato di recente troppo. L'intero ambiente separato non è stato molto semplice, specialmente se si dispone già di ambienti di sviluppo e produzione.

Tuttavia, ho trascorso un po 'di tempo a creare un pacchetto per risolvere questo problema, che è possibile trovare a https://github.com/ollieread/multiauth. Il pacchetto in sé è essenzialmente una classe di fabbrica per Auth, che consente di utilizzare più istanze di esso, in modo da accedervi in ​​questo modo:

Auth::admin()->check(); 
Auth::user()->check(); 
Auth::whatever()->check(); 

Spero che il pacchetto tu o chiunque altro alla ricerca di questo approccio aiuta.

2

Non ne sono sicuro, ma forse è utile. Perché non provare a creare per separare l'ambiente per l'amministratore. E poi avrai qualcosa come app/config/admin/session.php e app/config/session.php per la produzione (che è l'ambiente predefinito).

Potete vedere qui come ambienti http://andrewelkins.com/programming/php/how-to-set-laravel-4-environments/

configurazione Ma come ho detto è solo un'idea, io non sono molto sicuro di esso :)

+0

ambienti sono chiaramente il modo di andare qui. Imposta admin.yoursite.com e modifica i file di configurazione di conseguenza. Ciò presuppone che non si aggiungano metodi personalizzati alla classe utente che sono specifici del ruolo. – Makita

1

Sembra che dovresti prendere in considerazione la suddivisione dell'app in due codebase se le diverse entità utente raramente o mai hanno bisogno di vedere la stessa interfaccia. Avrebbero comunque interrogato lo stesso database ovviamente.

Non solo questo risolverà i vostri problemi di autenticazione, ma renderà il mantenimento del codice molto più semplice. Ad esempio, mentre si spingono gli aggiornamenti alla console di amministrazione, è sufficiente mettere quell'app in modalità di manutenzione mantenendo al contempo (presumibilmente) più frontend in funzione.

+0

Questo è davvero un ottimo punto.Abbiamo respinto l'idea di dividere queste basi di codice perché i benefici sono superati dalle preoccupazioni nel nostro caso. Tuttavia, il punto sulle modalità di manutenzione separate potrebbe far pendere la bilancia. –