配置文件设置中间件

时间:2018-10-11 16:43:57

标签: php laravel laravel-5 vuejs2 laravel-middleware

我有一个用户个人资料页面和用户个人资料/设置页面 问题是我制作了用于设置页面的中间件,以防止任何auth用户进入其他用户的设置页面或更新它们,除非ID或SLUG被匹配到auth用户,但是我每当使用API​​路由来获取或使用Vue时更新表示未经授权的401或500的数据。

中间件:

 public function handle($request, Closure $next)
    {
         if ($request->slug != auth()->user()->slug) {
            return redirect()->to('/');
        }
        return $next($request);
    }

API路径:

Route::get('/profile/{slug}','ProfilePrivateController@show')->middleware('editProfile');;

VueJs:

 update(){
            axios.put(`/api/profile/${this.id}`,{
                email : this.email,
                username : this.name,
                password : this.password,
                education_level : this.education_level,
                fb_url : this.fb_url,
                twitter_url : this.twitter_url,
                field : this.field
            })
            .then(res=>console.log(res))
        }

控制器:

 public function show($slug)
    {
         $user = User::findBySlugOrFail($slug);

         return response()->json($user);
    }


    public function update(Request $request, $slug)
    {
        $user = User::findBySlug($slug);

        $user->update([
            'email'=>$request->email,
            'education_level'=>$request->education_level,
            'field'=>$request->field,
            'school'=>$request->school,
            'fb_url'=>$request->fb_url,
            'twitter_url'=>$request->twitter_url,

        ]);
        if($request->has('password')){
            $user->save([
                'password'=>$request->password
            ]);
        }

        return response()->json('user updated',200);



    }

我想让用户同时更新其设置并保护API。

我真的迷失了,感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您有一个API路由的GET请求,但是在Vue中使用了PUT请求。

Route::get更新为Route::put应该可以解决问题。

此外,由于它是AJAX请求,因此您应该返回JSON响应,以便可以轻松使用它。您可以返回类似于以下内容的内容:

return response()->json(['error' => 'unauthorized'], 401);