Laravel 5.1 - 无法从我的控制器访问Auth:user() - >数据

时间:2016-01-01 21:21:28

标签: php laravel authentication laravel-5 laravel-5.1

我在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'];
}

http://grails.1312388.n4.nabble.com/Parameter-quot-logoutSuccessUrl-quot-in-spring-security-core-td2264147.html

我找到了解决方案,我改变了这个:

if(Auth::attempt(['correo_elec'=>$correo, 'password'=>$password]))

到这个

if(Auth::attempt(['correo_elec'=>$correo, 'password'=>$password], true))

那个eventyally让我必须在表格中更改我的cod_usu以获取id,并阅读jedrzej.kurylo的答案我想这就是诀窍

1 个答案:

答案 0 :(得分:2)

当您登录时,Laravel会尝试在会话中保存您的用户标识符,以便在后续请求期间加载它。默认情况下,模型的ID字段称为 id ,在您的情况下不是这样。因此,在您进行身份验证后,Laravel会将null存储为您的用户ID,以及之后无法加载它的原因。

您需要告诉Eloquent您的标识符列的名称是什么。您可以通过设置 Usuario 类的 $ primaryKey 属性来执行此操作:

protected $primaryKey = 'cod_usu';

您不仅需要它来使您的登录工作,而且还能够定义关系或使查找方法适用于您的模型,例如 Usuario :: find(123)无法从数据库加载您的用户。

启用记住我,这在您的案例中有所帮助,是偶然的。通过将企图()的第二个参数设置为true,您已启用记住我功能,这会导致创建一个随机标识符,该标识符保存在表格的 remember_toke 列中后来用于加载您的用户数据。这不是处理问题的正确方法,如果您决定在将来停用 remember-me ,它也会破坏您的应用程序。