php - 如何在前端进行身份验证,但在控制器中检查时未进行身份验证?
问题描述
failed
尝试发出发布请求时,它一直通过我的控制器提供。我正在尝试进行文件上传并将与用户关联的文件名存储到我的数据库中。我不确定我在这里做错了什么,我尝试了很多方法来解决这个问题,但是因为我碰壁了,所以无济于事。我相信这可能是我的代码在控制器中编写的方式,但我不太确定。
我在日志中得到的错误是Call to a member function photos() on null
这意味着
auth()->user()
没有检测到经过身份验证的用户,并且存在引出问题的问题 - 如何?我使用正确的凭据登录,没有问题。为什么我不能在单独的控制器中验证?
我做错了什么,我该如何解决?
注意:我的 React.js 和 Laravel 代码库是分开的。
这是我的反应表单提交:
handleSubmit(e) {
e.preventDefault();
console.log("here in submitHandler()");
let access_token = Cookies.get("access_token").slice(13, -8);
const headers = {
Authorization: `Bearer ${access_token}`
}
console.log(this.state.file_path);
axios.post('http://myendpoint/api/auth/dashboard', this.state.file_path, {headers})
.then(response => {
console.log(response);
}).catch(error => {
console.log(error);
})
};
这是我的FileUploadController.php
:
public function uploadTest(Request $request) {
if(auth()->user()) {
auth()->user()->photos()->create([
'file_path' => $request->file('fileToUpload')->getClientOriginalExtension()
]);
return response()->json($request->session()->get("user"));
}
return "failed";
}
这是我的用户模型:
public function photos() {
return $this->hasMany(Photo::class);
}
这是我的照片模型:
public function user() {
return $this->belongsTo(User::class);
}
这是我创建用户和登录的身份验证(AuthController.php
):
public function signup(Request $request) {
$request->validate([
'name' => 'required|string',
'email' => 'required|string|email|unique:users',
'password' => 'required|string|confirmed'
]);
$user = new User([
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt($request->password)
]);
$user->save();
return response()->json([
'message' => 'Successfully created user!'
], 201);
}
public function login(Request $request) {
$request->validate([
'email' => 'required|string|email',
'password' => 'required|string',
'remember_me' => 'boolean'
]);
$credentials = request(['email', 'password']);
if(!Auth::attempt($credentials))
return response()->json([
'message' => 'Unauthorized'
], 401);
$user = $request->user();
$tokenResult = $user->createToken('Personal Access Token');
$token = $tokenResult->token;
if ($request->remember_me)
$token->expires_at = Carbon::now()->addWeeks(1);
$token->save();
$request->session()->put("user", $user);
return response()->json([
'access_token' => $tokenResult->accessToken,
'token_type' => 'Bearer',
'expires_at' => Carbon::parse(
$tokenResult->token->expires_at
)->toDateTimeString(),
$user
]);
}
解决方案
推荐阅读
- java - 处理不同屏幕中的玩家?
- javascript - Javascript regex - 检查字符串是否包含两个或多个相同的字母
- javascript - 如何检测带有shadow dom的元素?
- reactjs - 为什么 Carousel 不接受 Next.js 图片?
- c# - 尝试使用 C# 导航 ModelMetadata 时如何获取 ContainerMetadata 的 PropertyName?
- cloud-init - 是否可以在 cloud-init 中同时运行命令
- putty - 无法让计算机连接到 GSM 调制解调器
- python - render_template 中的可选关键字参数
- python - Python/Pandas:一步删除包含两个字符串之一的列*不*?
- reactjs - React Admin getOne 不适用于 Api Patform dataProvider