The hasher was not provided to the user.

I can't get sentries to work. I keep getting this error: A hasher has not been provided for the user. Does anyone know what could happen?

The error log

I am running MAMP on OS X 10.9. I am using php 5.4.4 MCrypt is installed and enabled. This error occurs when trying to hash a password when creating a new user. Our project uses the laravel Sentry plugin. Here is the controller:

 <?php use Auth, BaseController, Form, Input, Redirect, Sentry, View; class AuthController extends BaseController { public function register() { return View::make('Auth.register'); } public function handleRegister() { $validator = Validator::make(Input::all(), User::$rules); if ($validator->passes()) { //The registration has passed, create a user $user = new User; $user->first_name = Input::get('first_name'); $user->last_name = Input::get('last_name'); $user->email = Input::get('email'); $user->password = Hash::make(Input::get('password')); $user->activated = 1; $user->save(); //grabbing the Sentry model of the user so we can save it to the appropriate group $sentryUser = Sentry::findUserByLogin($user->email); if (Input::get('userType') == 'Promoter') { $group = 'Promoters'; } else { $group = 'Agents'; } // Find the group using the group id $group = Sentry::findGroupByName($group); // Assign the group to the user $sentryUser->addGroup($group); return Redirect::action(' AuthController@login ')->with('message', 'Thanks for registering!'); } else { // validation has failed, display error messages return Redirect::action(' AuthController@register ')->with('message', 'The following errors occurred')->withErrors($validator)->withInput(); } } /** * Display the login page * @return View */ public function login() { return View::make('Auth.login'); } /** * Login action * @return Redirect */ public function handleLogin() { $credentials = array( 'email' => Input::get('email'), 'password' => Input::get('password') ); try { $user = Sentry::authenticate($credentials, false); if ($user) { return Redirect::action(' OfferController@offer '); } } catch(\Exception $e) { return Redirect::action(' AuthController@login ')->withErrors(array('login' => $e->getMessage())); } } /** * Logout action * @return Redirect */ public function logout() { Sentry::logout(); return Redirect::action(' AuthController@login ')->with('message','You have been logged out'); } } ?> 
+7
php mamp hash laravel cartalyst-sentry
source share
4 answers

The problem is that you configured Sentry to use User.php as the model that is losing the hacker. The solution is to set a hasher when the user registers

 $user->setHasher(new Cartalyst\Sentry\Hashing\NativeHasher); 
+13
source share

The best alternative to @Dylan Pierce's suggestion is to set the hash directly in your custom model constructor.

 public function __construct() { $this->setHasher(new \Cartalyst\Sentry\Hashing\NativeHasher); } 

Notice that there are other different hashers provided by Sentry, and you can find them in this directory: vendor/cartalyst/sentry/src/Cartalyst/Sentry/Hashing/

Full example:

 use Cartalyst\Sentry\Users\Eloquent\User; use Cartalyst\Sentry\Hashing\NativeHasher as SentryNativeHasher; class Subscriber extends User { public function __construct() { $this->setHasher(new SentryNativeHasher); } } 
+4
source share

If you want to use the setHasher method for the entire model; to save the function of the Eloquent class constructor, use the static "boot" method, which will be launched from the Eloquent constructor class:

 public static function boot() { static::setHasher(new \Cartalyst\Sentry\Hashing\NativeHasher); } 
+2
source share

The best way is to use the Eloquent download function (as suggested by @browno), but also use a hash from the parent class, so the Sentry setting for hashing will still be used. Also, be sure to call the parent load function, otherwise it will likely break things. Code example:

 use Cartalyst\Sentry\Users\Eloquent\User as SentryUser; class User extends SentryUser { protected static function boot() { parent::boot(); static::setHasher(parent::getHasher()); } } 
+1
source share

All Articles