【问题标题】:Not Able to get Auth::user->id in Laravel无法在 Laravel 中获取 Auth::user->id
【发布时间】:2016-06-30 13:45:58
【问题描述】:

这是我的控制器。

<?php
/**
 * Created by PhpStorm.
 * User: ed
 * Date: 05/02/16
 * Time: 09:33
 */

namespace App\Http\Controllers\API\V1;

use App\Certificate;
use App\Country;
use App\Film;
use App\FilmExtra;
use App\FilmFavourite;
use App\FilmGenre;
use App\FilmLike;
use App\FilmView;
use App\Genre;
use App\Language;
use App\Magazine;
use App\News;
use App\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Input;

class MagazineController extends ApiController
{
    public function viewAll(){



        echo Auth::user()->id;
        exit;

        $user_id = Input::get('user_id');

        $magazines = Magazine::paginate(5);
        return parent::api_response($magazines->toArray(), true, ['return' => 'all magazines'], 200);
    }

    public function getMagazine($id){
        $magazine = Magazine::find($id);
        if($magazine){
            return parent::api_response($magazine->toArray(), true, ['return' => 'magazine details'], 200);
        }else{
            return parent::api_response([], false, ['error' => 'Couldn\'t find that magazine'], 404);
        }
    }

    protected function getURL($id){
        $magazine = Magazine::find($id);
        if($magazine){
            return parent::api_response(['url' => $magazine->file_url], true, ['return' => 'magazine url'], 200);
        }else{
            return parent::api_response([], false, ['error' => 'Couldn\'t find that magazine'], 404);
        }
    }

    public function search($term){
        $magazines = Magazine::search($term)->paginate(5);
        return parent::api_response($magazines, true, ['return' => 'search for '.$term], 200);
    }

    public function purchased(){

        $magazines = Magazine::leftJoin('ordered_items', 'ordered_items.item_id', '=', 'magazines.id')
                        ->leftJoin('orders', 'orders.id', '=', 'ordered_items.order_id')
                        ->leftJoin('items', 'items.id', '=', 'ordered_items.item_id')
                        ->where('orders.user_id', $user_id)
                        ->where('items.class', 'book');

        if(Input::get('filter')) {
            $jsonFilter = Input::get('filter');
            $filters = json_decode($jsonFilter);

            foreach ($filters as $filter => $value){
                switch ($filter){
                    case "genre":
                        if($value){
                            $magazines = $magazines->whereHas('genre', function ($query) use($value) {
                                $query->whereIn('genre_id', $value);
                            });
                        }
                        break;
                    case "cert":
                       if($value){
                           $magazines = $magazines->whereIn('cert', $value);
                       }
                        break;
                    case "country":
                        if($value){
                            $magazines = $magazines->whereIn('country', $value);
                        }
                        break;
                    case "lang":
                       if($value){
                           $magazines = $magazines->whereHas('languages', function ($query) use($value) {
                               $query->whereIn('language_id', $value);
                           });
                       }
                        break;
                }
            }


        }

        $magazines = $magazines->paginate(5);

        return parent::api_response($magazines->toArray(), true, ['return' => 'all magazines'], 200);
    }

}

如果我为此控制器调用任何函数,我将无法获得我的Auth::user()-&gt;id

它抛出了一个错误。

MagazineController.php 第 54 行中的 ErrorException: 试图获取非对象的属性

如果我尝试在任何其他控制器中回显Auth::user()-&gt;id,它工作正常。

使用laravel 5.2

谁能帮帮我?

如果您愿意,请随时提出任何问题。

【问题讨论】:

  • 你是什么意思你不能得到它?它会抛出错误吗?还是什么都没有显示?
  • @Samsquanch 是的,在 MagazineController.php 第 54 行抛出错误 .ErrorException:试图获取非对象的属性
  • $user = Auth::user();回声 $user->id;退出;
  • @DevinGray ,刚刚试了一下,同样的错误。我想知道它不能只在这个控制器上工作。
  • 试试这个:if (Auth::check()) { echo "test"; exit; } -- 如果你没有得到“测试”,那么你就没有被授权。

标签: php laravel laravel-5.2


【解决方案1】:

可能Auth::user 返回null,而您正试图将id 设为null。

所以请确保用户的登录方式如下:

if (Auth::check()) {
  // The user is logged in...
  echo Auth::user()->id;
}

【讨论】:

  • 你可以通过Skype上网吗?
【解决方案2】:

确保此控制器的路由包含在 web 中间件组中。

另外,由于MagazineController 扩展了ApiController,请确保ApiController 扩展Controller

【讨论】:

  • 仅此而已。我仍然不知道为什么它不工作
【解决方案3】:

像这样使用 Laravel 5.2 方式

$user_collection = Auth::user();
echo $user_collection->id;
exit;

【讨论】:

    【解决方案4】:

    您是否更改了 users 表的 id 名称?我经历过。我把我的全部资本(ID)。我在 Linux 上,数据库、表和列名区分大小写。尝试检查用户表的 id 列。

    也就是说,如果您确定用户已登录。否则,如果我没记错的话,它将为空。

    【讨论】:

    • 你能不能过来Skype帮助我。 ?我已经检查了所有的东西。一切似乎都是正确的
    【解决方案5】:

    将您的控制器放在登录中间件下以确保您有登录用户,或者在访问用户 ID 之前简单地进行验证:

    if (Auth::check()) {
        $id = Auth::user()->id;
    }
    

    【讨论】:

      【解决方案6】:

      ApiController 做什么?

      将顶部的命名空间改为

      namespace App\Http\Controllers;
      

      尝试将ApiController 更改为纯Controller 并检查会发生什么

      代替:

      class MagazineController extends ApiController
      

      改成这样:

      class MagazineController extends Controller
      

      【讨论】:

      • 类 'App\Http\Controllers\API\V1\Controller' 未找到
      • 完成了。 Buddy 谢谢大家的快速回复。
      • 这是我的荣幸兄弟。如果我的回答帮助您选择它作为接受的答案
      • 问题是别的,但我的代码结构只是这样。
      猜你喜欢
      • 2016-02-04
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-30
      • 2019-06-27
      • 1970-01-01
      • 2018-03-07
      相关资源
      最近更新 更多