【问题标题】:Laravel 5 : How to use Auth::user()->id in routeLaravel 5:如何在路由中使用 Auth::user()->id
【发布时间】:2015-03-24 06:53:00
【问题描述】:

我尝试使用 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'));

`

【问题讨论】:

  • 您有查询的解决方案吗?

标签: php authentication laravel-5


【解决方案1】:

如果你想要执行某些东西,你应该使用 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.- 现在您在路由函数/控制器中获得了您想要的值,您可以将它与其他数据一起传递给视图。

【讨论】:

    【解决方案2】:

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

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

    现在点击“testauth”路线。它应该可以工作。

    【讨论】:

    • 我想共享所有视图共有的变量。 view()-&gt;share(compact('common_variable')); 如果我把它放在Route::get('\testauth',function(){ }) 中,我将如何在路由中未定义的其他视图中使用它
    • 如果您想与所有视图共享一个公共变量,那么您必须编写一个middleware,它将在每个请求或您将定义的特定请求上执行。按照这个laravel.com/docs/master/middleware
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      当您未通过身份验证时 Auth::user() 将始终返回 null 并且您在 null 对象上引用 id 这会给您错误

      【讨论】:

      • 我的应用程序已通过身份验证,我可以在我的视图文件中使用 Auth::user()->id 但不能在路由文件中使用。当我在路由中使用 Auth::user()->id 时,它显示相同的错误
      【解决方案5】:

      我就是这样做的。我想将视图限制为所请求对象的所有者,在我的例子中是“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、approved = true 和已删除 = 假。

      【讨论】:

        猜你喜欢
        • 2015-09-08
        • 1970-01-01
        • 2020-09-11
        • 2020-02-27
        • 1970-01-01
        • 1970-01-01
        • 2016-12-08
        • 1970-01-01
        • 2019-06-27
        相关资源
        最近更新 更多