我在Laravel 5.1中使用Auth数据时遇到了一些麻烦 我想获取Logged用户的ID,如果我在View中使用它,它会起作用,让我们说:
<?php echo Auth::user()->id;?>
但是如果我尝试在控制器中访问它,它会工作,我得到这个错误:
ErrorException in Con_Mascota.php line 101:
Trying to get property of non-object
在第101行我:
$cod_usu=$request->user()->cod_usu;
我从$ cod_usu = Auth :: user() - &gt; cod_usu;因为它也没有用。
我还将它包含在Controller中:
use Auth;
非常感谢任何帮助:)
我认为问题是我的Auth会话在刷新后或在我转到另一条路线后登出:
我的登录功能是:
*/
public function ini_ses(Request $datos)
{
//Inicia sesion
// Session::put('ses_correo', Input::get('email'));
$correo = $datos->input('email');
$password= $datos->input('password');
if(Auth::attempt(['correo_elec'=>$correo, 'password'=>$password]))
{
$_session['correo']=$correo;
$_session['contra']=$password;
if(Auth::user()->tipo==0)
{
return view('cliente');
}
elseif(Auth::user()->tipo==1)
{
return view('veterinario');
}
elseif(Auth::user()->tipo==2)
{
echo("Admin");
}
}
else
{
var_dump($correo, $password);
}
}
型号:
namespace App;
use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Foundation\Auth\Access\Authorizable;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
class Usuario extends Model implements AuthenticatableContract,
AuthorizableContract,
CanResetPasswordContract
{
use Authenticatable, Authorizable, CanResetPassword;
public $timestamps = false;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'usuario';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['cod_usu', 'correo_elec', 'nombre', 'ape_p', 'ape_m', 'telefono', 'celular', 'pais' , 'tipo'];
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = ['contra', 'remember_token'];
}
我找到了解决方案,我改变了这个:
if(Auth::attempt(['correo_elec'=>$correo, 'password'=>$password]))
到这个
if(Auth::attempt(['correo_elec'=>$correo, 'password'=>$password], true))
那个eventyally让我必须在表格中更改我的cod_usu以获取id,并阅读jedrzej.kurylo的答案我想这就是诀窍
答案 0 :(得分:2)
当您登录时,Laravel会尝试在会话中保存您的用户标识符,以便在后续请求期间加载它。默认情况下,模型的ID字段称为 id ,在您的情况下不是这样。因此,在您进行身份验证后,Laravel会将null存储为您的用户ID,以及之后无法加载它的原因。
您需要告诉Eloquent您的标识符列的名称是什么。您可以通过设置 Usuario 类的 $ primaryKey 属性来执行此操作:
protected $primaryKey = 'cod_usu';
您不仅需要它来使您的登录工作,而且还能够定义关系或使查找方法适用于您的模型,例如 Usuario :: find(123)无法从数据库加载您的用户。
启用记住我,这在您的案例中有所帮助,是偶然的。通过将企图()的第二个参数设置为true,您已启用记住我功能,这会导致创建一个随机标识符,该标识符保存在表格的 remember_toke 列中后来用于加载您的用户数据。这不是处理问题的正确方法,如果您决定在将来停用 remember-me ,它也会破坏您的应用程序。