Criei uma categoria personalizada para autenticação de usuários no Laravel. Usei o Auth
config/auth.php
'defaults' => [
'guard' => 'client',
'passwords' => 'clients',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
'shopper' => [
'driver' => 'session',
'provider' => 'clients'
],
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
'throttle' => 60,
],
'purchasers' => [
'provider' => 'clients',
'table' => 'password_resets',
'expire' => 60,
],
],
...
App/Consumer.php
namespace App;
use IlluminateContractsAuthAuthenticatable;
use IlluminateNotificationsNotifiable;
use IlluminateDatabaseEloquentModel;
class Consumer extends Mannequin implements Authenticatable
{
use Notifiable;
protected $guard = "shopper";
protected $desk = "purchasers";
public $id;
public $title;
public $password;
public $incrementing = false;
protected $fillable = ['id','name', 'email'];
protected $hidden = ['password', 'remember_token'];
public perform fetchClientByCredentials(Array $credentials){
$person = $this->the place('title', $credentials['name'])->first();
if(!is_null($person)){
$this->id = $person['id'];
$this->title = $person['name'];
$this->password = $person['password'];
}
return $this;
}
public perform getAuthIdentifierName(){
return "id";
}
public perform getAuthIdentifier(){
return $this->id;
}
public perform getAuthPassword(){
return $this->password;
}
public perform getRememberToken(){
if (! empty($this->getRememberTokenName())) {
return $this->{$this->getRememberTokenName()};
}
}
public perform setRememberToken($worth){
if (! empty($this->getRememberTokenName())) {
$this->{$this->getRememberTokenName()} = $worth;
}
}
public perform getRememberTokenName(){
return $this->bear in mind;
}
...
LoginController
use IlluminateFoundationAuthAuthenticatesUsers;
use IlluminateSupportFacadesAuth;
use IlluminateSupportFacadesHash;
use AppHttpControllersController;
use IlluminateHttpRequest;
use AppClient;
class LoginController extends Controller
{
public perform login(){
$f = new AppClient();
$f = $f->fetchClientByCredentials(array('title' => $request->solely('usernm')));
if($f){
if(Hash::verify($request->solely('passwd'), $f->password)){
if(Auth::guard('shopper')->loginUsingId($f->id, true)){
//dd(Auth::person()) retorna seus respectivos métodos e atributos.
return redirect()->motion('UserHomeController@index');
}
}
...
O código iria funcionar perfeitamente se Auth::person() e auth()::person() não retornassem null ao instanciar e utilizar o usuário em outro controller. Uma sessão chamada login_client_59… é criada com o valor null brand após efetuar o login.
dd(Session())
#drivers: array:1 [▼
"native" => IlluminateSessionStore {#237 ▼
#id: "UCwdJ3AUlahHfNvqaYd2mYV5SSESNWKjKKs6Altb"
#name: "laravel_session"
#attributes: array:4 [▼
"_token" => "fnv67TmWqa6ZsKv8sBHbFOxoWZVILxV5qHI44otb"
"_flash" => array:2 [▶]
"_previous" => array:1 [▶]
"login_client_59ba36addc2b2f9401580f014c7f58ea4e30989d" => null
]
Gostaria de saber se uma sessão é criada a partir do login do usuário e, se sim, como ela pode ser personalizada.