I can't seem to get sentry working. I keep getting this error: A hasher has not been provided for the user.
Does anyone know what would make this happen?
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 attempting to hash the 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');
}
}
?>
The problem is when you configured Sentry to use User.php as your model it loses the Sentry hasher. The solution is to set the hasher when a user is registering
$user->setHasher(new Cartalyst\Sentry\Hashing\NativeHasher);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With