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 以避免恶意用户做他/她不应该做的事情。

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

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);
}
}
- 3 回答
- 0 关注
- 178 浏览
添加回答
举报