首页 > 解决方案 > Auth::id() 找不到用户 id 并返回 null,laravel

问题描述

我在文章上设置喜欢和不同的选项。但在 LikeController 中存在问题。当我按下喜欢按钮时,它会说->

SQLSTATE [23000]:完整性约束违规:1048 列 'user_id' 不能为空(SQL:插入likes( user_id, article_id, updated_at, created_at) 值 (?, 5, 2019-05-30 07:58:34, 2019-05-30 07 :58:34))

更新了 JWT 和路由

喜欢的型号:

class Like extends Model
{
    public $timestamps = true;
    public $with = ["user"];

    protected $fillable = ["user_id", "article_id"];

    public function article()
    {
        return $this->belongsTo("App\Article");
    }

    public function user()
    {
        return $this->belongsTo("App\User");
    }
}

和 LikeController:

use Auth;
use App\Article;
use App\Like;

public function like($id)
{
    $article = Article::find($id);

    $like =  Like::create([
        "user_id" => Auth::id(),
        "article_id" => $article->id
    ]);

    return Like::find($like->id);
}

public function unlike($id)
{
    $article = Article::find($id);

    Like::where("user_id", Auth::id())
        ->where("article_id", $article->id)
        ->first()
        ->delete();

    return 1;
}

我不太清楚为什么Auth::id()找不到用户ID并返回null?

在 vue.js 中使用 JWT

路线:

Route::group(['prefix' => 'auth'], function ($router) {

  Route::post('register', 'AuthController@register');
  Route::post('login', 'AuthController@login');
  Route::post('logout', 'AuthController@logout');
  Route::post('refresh', 'AuthController@refresh');
  Route::post('me', 'AuthController@me');

});

Route::get("/like/{id}", [
        "uses" => "LikeController@like"
    ]);
Route::get("/unlike/{id}", [
        "uses" => "LikeController@unlike"
    ]);

AuthController用户

设置控制器和用户模型我遵循了文档:https ://jwt-auth.readthedocs.io/en/develop/quick-start/

标签: phplaravel

解决方案


您似乎没有使用身份验证保护您的 LikeController 路由。

除非你的LikeControllerfor 构造函数中有这样的东西:

    public function __construct()
    {
        $this->middleware('auth:api');
    }

那么你应该像这样保护你的 LikeController 路由:

Route::group([
    'middleware' => 'api',
], function ($router) {

    Route::get("/like/{id}", [
        "uses" => "LikeController@like"
    ]);
    Route::get("/unlike/{id}", [
        "uses" => "LikeController@unlike"
    ]);

});

那么使用登录的正确方法是

auth('api')->user()

或者

Auth::guard('api')->user()

推荐阅读