我在文章上设置喜欢和不喜欢的选项。但是在LikeController中有问题。当我按“赞”按钮时,它说->
SQLSTATE [23000]:违反完整性约束:1048列“ user_id” 不能为null(SQL:插入
likes
(user_id
,article_id
,updated_at
,created_at
)值(?,5,2019-05-30 07:58:34, 2019-05-30 07:58:34))
像模型:
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?
将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/develop/quick-start/
答案 0 :(得分:1)
您没有从路由组中指定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"
]);
});
答案 1 :(得分:0)
尝试这样导入Auth
use Illuminate\Support\Facades\Auth;
并获得这样的ID:
$user = Auth::user();
$id = $user->id;
希望这会有所帮助
在kernel.php上添加此middelware
protected $middlewareGroups = [
'web' => [
\Illuminate\Session\Middleware\StartSession::class,
],
];
此链接可能有帮助: Answer Link
答案 2 :(得分:0)
Auth::user()->id
使用此代码
答案 3 :(得分:0)
第一:确保route
或Controller
受身份验证中间件的保护。
秒::如果使用guard
,请确保您使用正确的multiple guard
进行身份验证。
you should specify your guard name like this: `Auth::guard('admin')->id()`
答案 4 :(得分:0)
您似乎没有通过auth保护LikeController路由。
除非您的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()
答案 5 :(得分:0)
好,
所以当我在vue js中使用jwt时,我的应用程序也遇到了这个问题。
获取最新的Auth::user()
。
您需要在请求中传递令牌。 如果您检查jwt核心文件,它将从令牌获取用户。 而且我猜你没有传递令牌。
如果是,则将令牌与您的请求一起传递。
并检查jwt
的文档。您是否正确安装了软件包?
请记住,对于laravel 5.5或更高版本,要使用的软件包版本为jwt > 1.0.0
另外,请正确检查该版本的文档。
答案 6 :(得分:0)
您也可以在拥有OAuth2的Laravel使用护照:-)
关于Laravel护照的Laravel文档说:
Laravel使用Laravel Passport使API身份验证变得轻而易举, 为您的Laravel提供完整的OAuth2服务器实现 只需几分钟即可完成申请。护照建立在 由Andy Millington和Simon维护的League OAuth2服务器 汉普。
You can look more information here where you see Laravel Passport Documentation
答案 7 :(得分:0)
检查用户是否已通过身份验证, 并且不要忘记使用Auth类。
use Auth;
检查auth是否要删除, 并使用Auth :: user()-> id
if (Auth::user())
{
Like::where("user_id", Auth::user()->id)
->where("article_id", $article->id)
->first()
->delete();
}