Ho usato config::set('auth.model','App\Fblogin')
e scaricato config::get('auth.model');
Sembra aggiornare il valore bene, ma quando provo a Auth::logInUsingId()
sembra che stia ancora usando il default App\User
. Quindi cosa posso fare in modo che io possa usare il App\Fblogin
sul mio controller?Cambiare il modello di Auth al volo
risposta
Se stai usando laravel 5.1.11 o superiore, utilizzare questo:
auth()->getProvider()->setModel(App\Fblogin::class);
Se non è possibile/non sarà l'aggiornamento, ho paura non c'è un modo semplice per raggiungere Questo.
Il modello è risolto tramite EloquentUserProvider
. La classe del modello utilizzata è impostata nel costruttore, che non può essere modificata in fase di esecuzione perché la proprietà è protected
.
è possibile estendere la EloquentUserProvider
, o si può barare e impostarlo:
function set_auth_model($model) {
$closure = (function ($model) { $this->model = $model; });
$closure = $closure->bindTo(Auth::getProvider());
$closure($model);
}
set_auth_model(App\Fblogin::class);
Ma in realtà ... basta eseguire l'aggiornamento.
Questo potrebbe essere possibile ma è necessario provarlo. È possibile impostare il proprio driver Auth, che estende semplicemente il driver di autenticazione laravel predefinito, ma lo modifica un po '. Puoi farlo attraverso un provider, per esempio. Nel metodo di avvio del provider che ci si dice:
$this->app['auth']->extend('my-auth', function ($app) {
return new Guard(
new MyUserProvider($app['hash']),
$app->make('session.store')
);
});
Nota Non siamo più passa il modello attraverso il costruttore. Lo gestiremo diversamente. La tua classe MyUserProvider estende EloquentUserProvider. Sostituiamo il metodo createModel con la nostra versione, che invece di usare il nome del modello costruito ottiene il nome del modello durante il runtime.
class MyUserProvider extends EloquentUserProvider
{
public function __construct(HasherContract $hasher)
{
$this->hasher = $hasher;
}
public function createModel()
{
$class = app()->config->get('auth.model');
return new $class;
}
}
Non ho effettivamente provato a vedere se questo funziona, ma probabilmente puoi farlo funzionare con questo metodo.
- 1. Posso cambiare SparkContext.appName al volo?
- 2. Puoi cambiare templateUrl al volo?
- 3. Django: import auth utente al modello
- 4. Modifica il valore delle impostazioni al volo?
- 5. Converti EPS in PDF al volo con pdflatex al volo
- 6. Convalidare EmberJS TextField al volo?
- 7. Creazione di sottodomini al volo
- 8. creazione di metodi al volo
- 9. PHPExcel scrivere al volo?
- 10. Scarica il codice ed esegui al volo
- 11. primavera: aggiungi il contesto xml al volo?
- 12. Calcolo dei percentili al volo
- 13. aggiunta @ font-face al volo
- 14. Modifica campi serializzatore al volo
- 15. git, lo schiacciamento si impegna al volo
- 16. Database al volo con linguaggi di scripting
- 17. interpolando grandi set di dati al volo
- 18. Come creare oggetti al volo in python?
- 19. Modifica il colore di sfondo dei singoli elementi al volo
- 20. Caricamento di più immagini con il tiro al volo?
- 21. Creazione di chiavi JSON al volo
- 22. Creazione di pulsanti paypal al volo
- 23. Overflow nascosto non funziona al volo stazionario
- 24. Creazione di un elenco al volo in un modello di Django
- 25. Modifica di un oggetto QuerySet al volo in Django
- 26. Cambiare il modello in OnActionExecuting evento
- 27. Avvio del profiler Java HPROF al volo
- 28. angolare: aggiornamento dell'oscilloscopio al volo stazionario
- 29. Debug Python: modifica del codice al volo
- 30. Python Gzip - Aggiungere file al volo
È possibile che non si stia eseguendo l'override del file di configurazione all'inizio del ciclo di vita dell'app. Cose diverse vengono eseguite e richieste in tutta l'app in momenti diversi. Vedi http://laravel.com/docs/5.1/lifecycle per maggiori dettagli. Probabilmente, dovrai sovrascrivere la configurazione non più tardi dei tuoi metodi di avvio o registrazione "app/Provider/AppServiceProvider.php". In caso contrario, è probabile che il modello auth venga utilizzato prima di essere sottoposto a override. –
per favore spiega nella tua domanda dove e come stai impostando il valore auth.model. Il ciclo di vita di laravel è molto specifico e richiede di annullare esplicitamente il comportamento al momento giusto. – Luceos
sì, come ha detto @Luceos, alcuni esempi di codice potrebbero aiutare a risolvere il problema. Spero che tu (o qualcuno del tuo team di sviluppo) non stia eseguendo _caching_ le tue configurazioni. – kishanterry