Laravel 5:如何在路由中使用Auth :: user() - > id

时间:2015-03-24 06:53:00

标签: php authentication laravel-5

我尝试使用 php Laravel框架创建一个应用程序。当我在路径文件中使用 Auth :: user() - > id 我收到错误“试图获取非对象的属性”。那么如何修复它?

这是我的路线档案

`

<?php 
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/
Route::get('/', 'HomeController@index');
Route::controllers([
    'auth' => 'Auth\AuthController',
    'password' => 'Auth\PasswordController',
]);
$common_variable=App\MyModel::where('site_id',Auth::user()->id)->count();
view()->share(compact('common_variable'));

`

5 个答案:

答案 0 :(得分:2)

如果你想要执行某些东西,你应该使用laravel 5中间件。

1.- php artisan make:middleware newMiddleware。

2.-通过设置中间件属性,将中间件添加到所需的所有路由中。

Route::get('test', ['before' => 'newMiddleware', function(){
    //
}]);

3.-现在以适当的方式做你想要完成的事情

$user_id = Auth::user()->id()
if($user_id){
    $variable = \App\Model::where('site_id', '=', $user_id)
}

return $variable

4.-现在您的路线功能/控制器中有您想要的值,您可以将其与其他数据一起传递给视图。

答案 1 :(得分:1)

你必须定义你的路线,否则它将不起作用

Route::get('/testauth', function()
{
   var_dump(Auth::user());
   // your code here 
});

现在点击'testauth'路线。它应该工作。

答案 2 :(得分:1)

您无法在路由模型绑定中访问经过身份验证的用户,因为身份验证中间件尚未运行。请参见discussion thread,其中提出了一些解决方法。

答案 3 :(得分:0)

您必须确保您的用户已通过身份验证

$common_variable=Auth::check() ?App\MyModel::where('site_id',Auth::user()->id)->count() : 0;

当您未经过身份验证时,Auth :: user()将始终返回null,并且您在null对象上引用id,从而为您提供错误

答案 4 :(得分:0)

这就是我这样做的方式。我想将视图限制为所请求对象的所有者,在我的例子中是“API密钥”。我用Laravel的路由模型绑定来做到这一点。

Route::model('apikeys', 'Apikey');

Route::bind('apikeys', function($value, $route) {
    return Apikey::whereSlug($value)->where('users_id', '=', Auth::user()->id)->where('approved', '=', true)->where('deleted', '=', false)->first();
});

Route::resource('apikeys', 'ApikeysController');

在这种情况下,我传入所请求的“slug”的值(即api键的友好URL),然后在经过身份验证的用户ID附加AND'ed where子句,approved = true,并且deleted = false。