php - 使用 laravel7 的用户配置文件管理器
问题描述
使用 laravel7,我想让每个用户都能够修改他们的个人资料,但我不能。当连接的用户想要修改他的个人资料时,使用我的代码有一条消息告诉他他没有被授权。这是不正常的。我不知道我的错误在哪里。请帮我!
路线:
route::get('/profiles/{user}', 'ProfileController@show')->name('profiles.show');
route::get('/profiles/{user}/edit', 'ProfileController@edit')->name('profiles.edit');
route::patch('/profiles/{user}', 'ProfileController@update')->name('profiles.update');
我的更新视图:
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header alert-primary">{{ __('Update my profile') }}</div>
<div class="card-body">
<form method="POST" action="{{ route('profiles.update', ['user' => $user]) }}" >
@csrf
@method('PATCH')
<div class="form-group row">
<label for="firstname" class="col-md-4 col-form-label text-md-right">{{ __('Firstname') }}</label>
<div class="col-md-6">
<input id="firstname" type="text" class="form-control @error('firstname') is-invalid @enderror" name="firstname" value="{{ old('firstname') ?? $user->firstname}}" required autocomplete="firstname" autofocus>
@error('firstname')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="lastname" class="col-md-4 col-form-label text-md-right">{{ __('Lastname') }}</label>
<div class="col-md-6">
<input id="lastname" type="text" class="form-control @error('lastname') is-invalid @enderror" name="lastname" value="{{ old('lastname') ?? $user->lastname}}" required autocomplete="lastname" autofocus>
@error('lastname')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="role" class="col-md-4 col-form-label text-md-right">{{ __('Role') }}</label>
<div class="col-md-6">
<input id="role" type="text" class="form-control @error('role') is-invalid @enderror" name="role" value="{{ old('role') ?? $user->role}}" required autocomplete="role" autofocus>
@error('role')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="phone" class="col-md-4 col-form-label text-md-right">{{ __('Phone') }}</label>
<div class="col-md-6">
<input id="phone" type="text" class="form-control @error('phone') is-invalid @enderror" name="phone" value="{{ old('phone') ?? $user->phone}}" required autocomplete="phone" autofocus>
@error('phone')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') ?? $user->email}}" required autocomplete="email">
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="adress" class="col-md-4 col-form-label text-md-right">{{ __('Adress') }}</label>
<div class="col-md-6">
<input id="adress" type="text" class="form-control @error('adress') is-invalid @enderror" name="adress" value="{{ old('adress') ?? $user->adress}}" required autocomplete="adress" autofocus>
@error('adress')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="profession" class="col-md-4 col-form-label text-md-right">{{ __('Profession') }}</label>
<div class="col-md-6">
<input id="profession" type="text" class="form-control @error('profession') is-invalid @enderror" name="profession" value="{{ old('profession') ?? $user->profession}}" required autocomplete="profession" autofocus>
@error('profession')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label>
<div class="col-md-6">
<input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-6 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Update') }}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
我的控制器:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use app\User;
use Validator;
use Illuminate\Foundation\Validation\ValidatesRequests;
class ProfileController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show(User $user)
{
//
return view ('profiles.show', compact ('user'));
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit(User $user)
{
//
$this->authorize('update', $user->profile);
return view ('profiles.edit', compact ('user'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update( User $user)
{
//
$this->authorize ('update', $user->profile);
$data = request()->validate ([
'firstname'=>'required',
'Lastname'=>'required',
'phone' => 'required' ,
'email' => 'required',
'adress' => 'required',
'profession' => 'required',
'password' => 'required',
]);
auth()->$user->update($data);
return redirect()->route('profiles.show', ['user'=> $user]);
}
}
我的模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Profile extends Model
{
protected $guarded = [];
public function user(){
return $this->belongsTo('App\User');
}
}
谢谢
解决方案
Auth
在中间件中获取您的路由。
Route::group(['middleware' => ['auth']], function () {
route::get('/profiles/{user}', 'ProfileController@show')->name('profiles.show');
route::get('/profiles/{user}/edit', 'ProfileController@edit')->name('profiles.edit');
route::patch('/profiles/{user}', 'ProfileController@update')->name('profiles.update');
});
推荐阅读
- python - 如何合并每个都是字符串列表的行..不包括重复项
- string - FSharp F# 中的字符串编辑问题
- jenkins - 如何将 Jenkins DSL 管道命令设置为 groovy 中的变量?
- c# - 仅在存在时引用类库 - .NET Core
- c# - 字符串未被识别为具有相同格式的有效日期时间
- jquery - jQuery $(this) 关键字在插件中不起作用
- r - lapply 在数据框列表上的工作方式与单独应用于 dfs 的 FUN 不同
- sql-server - 将双精度值与 ISNULL 进行比较时的问题
- javascript - 另一个文件中的变量不会显示为
- 在购物车页面
- excel - 如何在命令按钮宏上使用 VBA 代码打开特定工作表?