首页 > 解决方案 > 如何在前端进行身份验证,但在控制器中检查时未进行身份验证?

问题描述

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
        ]);
    }

标签: phpreactjslaraveldebugging

解决方案


推荐阅读