这次我有这样的Url 的 http://Blog/user/profile/51 并且我使用 id = 51 的用户登录但是如果我将此ID更改为50,则会显示包含id为50的用户数据的表单我想停止这个我如何保护帮助请。 如何在执行othere之前检查这个条件
public function profile($id, Request $request)
{
***if($id == Auth::user()->id){
Now Check get or post method
}else{
return ('Out');
}***
$method = $request->method();
if ($request->isMethod('get')) {
$user = User::findOrFail($id);
$users = DB::table('users')->select('id', 'name')->get();
$user_fields = DB::table('users')->where('id', $user->id)->get();
$page_data = [
'title' => 'Edit User Account',
'action' => 'edit'
];
return view('user.profile')->with(compact('user', 'page_data', 'users'));
}else{
$this->validate($request, [
'name' => 'required|max:255',
]);
$user = User::findOrFail($id);
$input = $request->all();
$user->fill([
'name' => $request->input('name'),
'password' => $request->password ? bcrypt($request->input('password')) : $user->password,
'time_zone' => $request->input('time_zone'),
'address_line_1' => $request->input('address_line_1'),
'address_line_2' => $request->input('address_line_2'),
])->save();
session()->flash('msg',trans('successfully Updated.'));
}
我知道我可以检查auth用户ID等于这个id但不知道如何实现我在这里打磨网址
<form action="/user/profile/{{$user->id}}" method="POST">
我正在将auth用户ID作为
<a href="{{ route('user.profile', ['id' => Auth::user()->id ]) }}">
路线如下
Route::any('/user/profile/{id}', ['as' => 'user.profile', 'uses' => 'UserController@profile']);
现在我如何在show form之前检查用户是否是相关表单 感谢
答案 0 :(得分:1)
如果要将用户个人资料设为私有,则不应将其与GET
参数绑定(仅对公共个人资料页面执行此操作)。您应该做什么将配置文件路由放在auth
中间件组中:
Route::group(['middleware' => 'auth'], function () {
Route::get('profile', 'UserController@showProfile');
}
使用auth()->user()
对象来显示数据:
{{ auth()->user()->name }}
{{ auth()->user()->email }}
答案 1 :(得分:0)
Laravel Middleware (docs)
中间件将帮助您,它将允许您检查请求该URL的用户是否具有与其会话中存储的相同的ID。如果他们匹配他的所有者&#39;如果没有,你可以重定向他提供错误信息。
创建middelware (App \ Http \ Middleware \ IsOwnerOfProfile.php)
<?php
namespace App\Http\Middleware;
use Closure;
class IsOwnerOfProfile {
/**
* Check if the user accessing the profile is the owner of the profile
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next){
if ($request->id != auth()->user()->id) {
return redirect('home')->with('error','You are not the owner of this profile');
}
return $next($request);
}
}
注册middelware (App \ Http \ Kernel.php)
protected $routeMiddleware = [
// other defined middlewares
'profileOwner' => \App\Http\Middleware\IsOwnerOfProfile::class,
]
更新路线
Route::any('/user/profile/{id}', [
'middleware' => 'profileOwner'
'as' => 'user.profile',
'uses' => 'UserController@profile'
]);
注意&amp;更新:
正如@Alexey Mezenin所提到的,auth
middelware必须在此之前执行。否则,您将无法访问auth()->user()
,中间件将抛出异常。