2015-09-15 9 views
1

Я пытаюсь использовать службу аутентификации laravel.Laravel 5 Не удается получить аутентифицированный пользователь из вида

Проблема заключается в том, что я могу успешно зарегистрировать нового пользователя и перенаправить на успешную страницу. Тем не менее, я не могу получить аутентифицированного пользователя на успешной странице.

Ниже показано, что сделано до сих пор.

вид

<form class="form-horizontal" role="form" method="POST" action="/auth/register"> 
    <input type="hidden" name="_token" value="{{ csrf_token() }}"> 

    <div class="form-group"> 
     <label class="col-md-4 control-label">User Name</label> 
     <div class="col-md-6"> 
      <input type="text" class="form-control" name="username" value="{{ old('first_name') }}"> 
     </div> 
    </div> 

    <div class="form-group"> 
     <label class="col-md-4 control-label">E-Mail Address</label> 
     <div class="col-md-6"> 
      <input type="email" class="form-control" name="email" value="{{ old('email') }}"> 
     </div> 
    </div> 

    <div class="form-group"> 
     <label class="col-md-4 control-label">Password</label> 
     <div class="col-md-6"> 
      <input type="password" class="form-control" name="password"> 
     </div> 
    </div> 

    <div class="form-group"> 
     <label class="col-md-4 control-label">Confirm Password</label> 
     <div class="col-md-6"> 
      <input type="password" class="form-control" name="password_confirmation"> 
     </div> 
    </div> 

    <div class="form-group"> 
     <div class="col-md-6 col-md-offset-4"> 
      <button type="submit" class="btn btn-primary"> 
       Register 
      </button> 
     </div> 
    </div> 
</form> 

пользователя Модель (register_info)

/** 
    * The database table used by the model. 
    * 
    * @var string 
    */ 
    protected $table = 'register_info'; 

    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = ['user_id','username', 'email', 'password','city']; 

    /** 
    * The attributes excluded from the model's JSON form. 
    * 
    * @var array 
    */ 
    protected $hidden = ['password', 'remember_token']; 

    /** 
    * The primary key for the model. 
    * 
    * @var string 
    */ 
    protected $primaryKey = 'user_id'; 

Контроллер:

class AuthController extends Controller 
{ 
    /* 
    |-------------------------------------------------------------------------- 
    | Registration & Login Controller 
    |-------------------------------------------------------------------------- 
    | 
    | This controller handles the registration of new users, as well as the 
    | authentication of existing users. By default, this controller uses 
    | a simple trait to add these behaviors. Why don't you explore it? 
    | 
    */ 

    use AuthenticatesAndRegistersUsers, ThrottlesLogins; 

    /** 
    * When a user is successfully authenticated 
    * they will be redirected to $redirectPath 
    */ 
    protected $redirectPath = 'manybotest'; 

    /** 
    * When a user is not successfully authenticated 
    * they will be redirected to the $loginPath 
    */ 
    protected $loginPath = '/login'; 

    /** 
    * Create a new authentication controller instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     $this->middleware('guest', ['except' => 'getLogout']); 
    } 

    /** 
    * Get a validator for an incoming registration request. 
    * 
    * @param array $data 
    * @return \Illuminate\Contracts\Validation\Validator 
    * 
    * 'email' => 'required|email|max:255|unique:register_info', 
    */ 
    protected function validator(array $data) 
    { 
     return Validator::make($data, [ 
      'username' => 'required|max:255', 
      'password' => 'required|confirmed|min:6', 
     ]); 
    } 

    /** 
    * Create a new user instance after a valid registration. 
    * 
    * @param array $data 
    * @return User 
    */ 
    protected function create(array $data) 
    { 

     return User::create([ 
      'user_id' => uniqid('us'), 
      'username' => $data['username'], 
      'email' => $data['email'], 
      'password' => bcrypt($data['password']) 
     ]); 
    } 
} 

Маршруты:

Route::get('manybotest', function() { 
     $users = Auth::user(); 
     return view('manybotest',compact('users')); 
    }); 

вид дисплея (manybotest.blade.php):

<?php 

     var_dump(Session::all()); 
     var_dump(Auth::check()); 
     var_dump(Auth::user()); 
     var_dump(Auth::id()); 
     var_dump($users); 

    ?> 

Результат:

login_82e5d2c56bdd0811318f0cf078b78bfc => int 0//Session::all() 
boolean false//Auth::check() 
null//Auth::user() 
int 0//Auth::id() 
null//$users passed by routes 

Вопрос:

Я могу получить идентификатор пользователя из сеанса. Почему я не могу получить аутентифицированного пользователя? Я также пытаюсь проверить внутренний код laravel, пользователь уже был установлен laravel.

+0

Вы можете указать код, который вы используете для регистрации пользователя (т. Е. Для маршрута '/ auth/register')? –

+0

Где ваша страница входа? – aldrin27

+0

@JamesFlight Я использую службу регистрации laravel. Я показал код регистра, как указано выше, в контроллере – OSCAR

ответ

0

Вы должны ввести Guard и Register в конструктор.

use Illuminate\Contracts\Auth\Guard; 
use Illuminate\Contracts\Auth\Registrar; 

class AuthController extends Controller 
{ 

    public function __construct(Guard $auth, Registrar $registrar) 
    { 
     parent::__construct(); 

     $this->auth = $auth; 
     $this->registrar = $registrar; 

     $this->middleware('guest', ['except' => 'getLogout']); 
    } 

Если посмотреть на AuthenticatesAndRegistersUsers, вы можете увидеть, что в методе postRegister, login вызывается $this->auth.

+0

Большое спасибо @ blackpla9ue, проблема решена. Если вас это интересует, см. Ответ, указанный ниже. – OSCAR

1

Проблема решаемая:

Основная проблема заключается в том, что мой стол идентификатор пользователя настроен, который не является auto_increment идентификатор.

После добавления public $ incrementing = false; к моей модели пользователя. Проблема решена.

class User extends Model implements AuthenticatableContract, CanResetPasswordContract 
{ 
    use Authenticatable, CanResetPassword; 


    public $incrementing = false; 

    /** 
    * The database table used by the model. 
    * 
    * @var string 
    */ 
    protected $table = 'register_info'; 

    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = ['user_id','username', 'email', 'password','city']; 

    /** 
    * The attributes excluded from the model's JSON form. 
    * 
    * @var array 
    */ 
    protected $hidden = ['password', 'remember_token']; 

    /** 
    * The primary key for the model. 
    * 
    * @var string 
    */ 
    protected $primaryKey = 'user_id'; 

    /** 
    * Get the bonding UserDetail 
    * 
    * @return UserDetail 
    */ 
    public function getUserDetail() 
    { 
     return $this->hasOne('App\Model\UserDetail','user_id','user_id'); 
    } 

} 

Анализ проблемы: В Laravel, по умолчанию идентификатор модели пользователя устанавливается как автоприращение. Если мы используем индивидуальный user_id, как и я.

/** 
    * Create a new user instance after a valid registration. 
    * 
    * @param array $data 
    * @return User 
    */ 
    protected function create(array $data) 
    { 

     return User::create([ 
      'user_id' => uniqid('us'), 
      'username' => $data['username'], 
      'email' => $data['email'], 
      'password' => bcrypt($data['password']) 
     ]); 
    } 

Возвращенная модель будет содержать идентификатор автоинкремента. То, что я получил, всегда равно 0. Поэтому экземпляр пользователя с id 0 хранится в laravel.Когда я вызываю Auth: user(), мы получим null вместо экземпляра User.

{"user_id":"0","username":"[email protected]","password":"xxxxxxx"} 

После добавления общественность $ = ложное приращения; к моей модели пользователя. Я могу правильно получить свой пример пользователя с идентификатором, который я определил.

{"user_id":"us55f7e7afbe87f","username":"[email protected]","password":"xxxxxxx"} 

Надеюсь, это будет полезно.

Спасибо всем, кому помогли раньше.

Смежные вопросы