Auth :: id () не может найти идентификатор пользователя и вернуть ноль, laravel - PullRequest
0 голосов
/ 30 мая 2019

Я настраиваю как и в отличие от параметров в статьях.но в 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 и маршруты

Like model:

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() не может найти идентификатор пользователя ивернуть ноль?

Использование JWT с vue.js

Маршруты:

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 /velop / quick-start /

Ответы [ 6 ]

1 голос
/ 30 мая 2019

Вы пропустили указание middleware => api из групп маршрутов. Также включите like связанные маршруты или любые защищенные маршруты в этой группе маршрутов.

config/auth.php должно быть обновлено как

'defaults' => [
    'guard' => 'api',
    'passwords' => 'users',
],

...

'guards' => [
    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ],
],

В routes/api.php

Route::post('login', 'AuthController@login')->name('login');

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

    Route::group(['prefix' => 'auth'], function ($router) {
        Route::post('register', 'AuthController@register');
        # Route::post('login', 'AuthController@login'); // commented.
        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"
    ]);

});
0 голосов
/ 30 мая 2019

Хорошо,

, поэтому у меня также возникла проблема с моим приложением, когда я использовал jwt с vue js.для получения тока Auth::user().

Вам необходимо передать токен с вашим запросом.если вы проверяете файл ядра jwt, он получает пользователя из токена.и я полагаю, вы не передаете токен.

Если да, тогда, пожалуйста, передайте токен вместе с вашим запросом.А также проверьте документацию jwt.вы правильно установили свой пакет?помните, что для laravel 5.5 или выше эта версия пакета для использования jwt > 1.0.0 также, проверьте документацию этой версии должным образом.

0 голосов
/ 30 мая 2019

Вы, кажется, не защищали свои маршруты LikeController с помощью auth.

Если у вас нет чего-то подобного в вашем LikeController для конструктора:

    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()
0 голосов
/ 30 мая 2019

сначала: убедитесь, что route или Controller защищены промежуточным программным обеспечением для аутентификации.

секунда: убедитесь, что вы используете правильный guard для аутентификации, если используется multiple guard.

you should specify your guard name like this: `Auth::guard('admin')->id()`
0 голосов
/ 30 мая 2019
Auth::user()->id

используйте этот код

0 голосов
/ 30 мая 2019

Попробуйте импортировать Auth как таковой

use Illuminate\Support\Facades\Auth;

и получить идентификатор следующим образом:

$user = Auth::user();
$id = $user->id;

Надеюсь, это поможет

Добавить этоMiddelware на kernel.php

protected $middlewareGroups = [
        'web' => [
            \Illuminate\Session\Middleware\StartSession::class,
        ],
];

эта ссылка может помочь: Ответить Ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...