为了账号安全,请及时绑定邮箱和手机立即绑定

如何限制用户只能查看自己的个人资料

如何限制用户只能查看自己的个人资料

PHP
梵蒂冈之花 2022-07-29 16:33:46
我有一个视图(resources/view/front/auth/profile.blade.php),我在web.php文件中的路线是:Route::get('/profile/{user}','UserController@edit')    ->name('profile')    ->middleware('profilecheck');我的问题是,当用户登录并被重定向到他们自己的个人资料页面 ( http://exmaple.com/profile/2) 时,他/她可以将 URL 更改为http://exmaple.com/profile/3并查看其他用户的个人资料。我想使用中间件检查带有 URL 参数的经过身份验证的用户 ID {user}。$user->id遗嘱传给了,{user}但我不知道如何。中间件UserProfile.php:<?phpnamespace App\Http\Middleware;use App\User;use Closure;class UserProfile{    /**     * Handle an incoming request.     *     * @param  \Illuminate\Http\Request  $request     * @param  \Closure  $next     * @return mixed     */    public function handle($request, Closure $next)    {        // $request->user()->id        // Auth::user()->id        return $next($request);    }}
查看完整描述

3 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

您可以简单地通过从 URL 中删除用户 ID 来保护路由,而是通过身份验证会话获取它。


因此,您的路线签名应该来自:


Route::get('/profile/{user}', 'UserController@edit')->name('profile');

对此:


Route::get('/profile', 'UserController@edit')->name('profile');

因此,在您的控制器中,而不是从请求中获取用户 ID:


public function edit(Request $request)

{

     $user = User::findOrFail($request->id);

     // ...

}

您可以User通过Auth外观登录:


use Illuminate\Support\Facades\Auth;


public function edit(Request $request)

{

     $user = Auth::user();

     // ...

}

或者只是auth()帮手:


public function edit(Request $request)

{

     $user = auth()->user();

     // ...

}

这样,您就可以屏蔽 URL 以避免恶意用户做他/她不应该做的事情。


查看完整回答
反对 回复 2022-07-29
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

// Controller 

 public function index()

    {

        if (Auth::check() && Auth::user()->role->id == 2) {

            return view('author.setting.settings');

        } else {

            Toastr::info('you are not authorized to access', 'Info');

            return redirect()->route('login');

        }

    }


// Route 

Route::group(['as'=>'user.','prefix'=>'user','namespace'=>'Author','middleware'=>['auth','user']], function (){


    Route::get('/setting','SettingsController@index')->name('settings.settings');


});


查看完整回答
反对 回复 2022-07-29
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

你需要做这样的事情。


你的路线


Route::get('/profile', [

    'uses' => 'UserController@profile',

    'middleware' => 'profilecheck'

]);

你的中间件


class CheckUserMiddleware

{    

  public function handle($request, Closure $next)

  {


    if(!auth()->user()) {

        return redirect()->route('login');

    }


    return $next($request);

  }

}


查看完整回答
反对 回复 2022-07-29
  • 3 回答
  • 0 关注
  • 178 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号