Laravel Blog

Tutorial, tips, consigli e patemi su Laravel & dintorni

Auth::attempt(), Facades, Workbench

In attesa di Laravel 5 ho iniziato a convertire parti del CMS che sto utilizzando ormai da inizio anno in un package di Laravel (finalmente !)

usercontroller.php

                if (Auth::attempt($credentials, true))
                {
                    // some logic
                }

All’improvviso ecco che compare un errore all’apparenza ostico:

authattempt.php

[2014-10-30 21:25:51] fluidworksdev.ERROR: exception 'Symfony\Component\Debug\Exception\FatalErrorException' 
with message 'Call to undefined method Warp\Core\Facades\User::newQuery()' 
in /var/www/*/cp/vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php:87

eloquentuserprovider-php.php

	/**
	 * Retrieve a user by the given credentials.
	 *
	 * @param  array  $credentials
	 * @return \Illuminate\Contracts\Auth\User|null
	 */
	public function retrieveByCredentials(array $credentials)
	{
		// First we will add each credential element to the query as a where clause.
		// Then we can execute the query and, if we found a user, return it in a
		// Eloquent User "model" that will be utilized by the Guard instances.
		$query = $this->createModel()->newQuery();

		foreach ($credentials as $key => $value)
		{
			if ( ! str_contains($key, 'password')) $query->where($key, $value);
		}

		return $query->first();
	}

Il problema (riga 87) era $query = $this->createModel()->newQuery();

Ho semplicemente dimenticato di dire a Laravel di utilizzare il modello Eloquent del package (Warp\Core\User) per l’autenticazione e non quello “Standard” (User). Ovviamente questo può valere qualsiasi cosa standard si tocchi e riguardo l’autenticazione la soluzione migliore sarebbe stata quella di creare un nuovo Provider con delle logiche nuove ma per il momento non ho bisogno di niente che non possa fare con il modello base.

auth.php

	/*
	|--------------------------------------------------------------------------
	| Authentication Model
	|--------------------------------------------------------------------------
	|
	| When using the "Eloquent" authentication driver, we need to know which
	| Eloquent model should be used to retrieve your users. Of course, it
	| is often just the "User" model but you may use whatever you like.
	|
	*/

	'model' => 'Warp\Core\User',

 

 

Rispondi

%d blogger cliccano Mi Piace per questo: