使用确认电子邮件通过用户邀请创建密码后,用户不会自动登录。我尝试在 store() 方法上进行 dd 操作,它已到达那里,但守卫似乎存在一些问题。
RegisteredUserController.php
<?php
namespace App\Http\Controllers\Admin;
use App\Models\User;
use Inertia\Inertia;
use App\Models\Invite;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Auth\Events\Registered;
use Illuminate\Contracts\Auth\StatefulGuard;
use Laravel\Fortify\Contracts\CreatesNewUsers;
use Laravel\Fortify\Contracts\RegisterResponse;
class RegisteredUserController extends Controller
{
protected $guard;
public function __construct(StatefulGuard $guard)
{
$this->guard = $guard;
}
public function create($token)
{
$invite = Invite::where('token', $token)->first();
if (!$invite) {
abort(403, 'Esta invitación ha expirado');
}
$user = User::where('email', $invite->email)->first();
// if ($user) {
// $invite->delete();
// return redirect(config('fortify.site_home'));
// }
$inviteData = [
'first_name' => $invite->first_name,
'last_name' => $invite->last_name,
'email' => $invite->email,
'token' => $invite->token,
'role' => $invite->role,
'accounts' => $invite->accounts()->pluck('id')->toArray(),
];
if ($invite->role === 'account-manager') {
$inviteData['parent_id'] = $invite->parent->id;
}
if ($invite->role === 'analyst') {
$inviteData['parent'] = $invite->parent->id;
}
return Inertia::render('Auth/InviteRegister', ['invite' => $inviteData]);
}
public function store(Request $request, CreatesNewUsers $creator): RegisterResponse
{
event(new Registered($user = $creator->create($request->all())));
$this->guard->login($user);
return app(RegisterResponse::class);
}
}
这个 RegisteredUserController 正在从 web.php 路由中调用
<?php
use Inertia\Inertia;
use Illuminate\Support\Facades\Route;
use Illuminate\Foundation\Application;
use Illuminate\Support\Facades\Redirect;
use App\Http\Controllers\Social\GeneralController;
use App\Http\Controllers\Social\TwitterController;
use App\Http\Controllers\Social\YoutubeController;
use App\Http\Controllers\Social\FacebookController;
use App\Http\Controllers\Social\LinkedinController;
use App\Http\Controllers\Social\BenchmarkController;
use App\Http\Controllers\Social\InstagramController;
use App\Http\Controllers\Admin\Users\UserAdminController;
use App\Http\Controllers\Admin\Profile\MyAccountController;
use App\Http\Controllers\Admin\Users\UserInvitationController;
use App\Http\Controllers\Admin\Users\UserAccountManagerController;
use App\Http\Controllers\Admin\Users\UserAnalystController;
Route::group([
'as' => 'register.',
'prefix' => 'register',
'namespace' => 'App\Http\Controllers\Admin'
], function () {
Route::get('/{token}', 'RegisteredUserController@create')->name('registration');
Route::post('/', 'RegisteredUserController@store')->name('store');
});
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return Redirect::to('login');
});
Route::middleware([
'auth:sanctum',
config('jetstream.auth_session'),
'verified'
])
->withoutMiddleware([ShareInertiaData::class])
->group(function () {
Route::group([
'prefix' => '/analytics/account/{account?}',
], function () {
Route::name('social.')->prefix('/social')->group(function () {
Route::get('/', [GeneralController::class, 'index'])->name('general');
Route::get('/instagram', [InstagramController::class, 'index'])->name('instagram');
Route::get('/facebook', [FacebookController::class, 'index'])->name('facebook');
Route::get('/twitter', [TwitterController::class, 'index'])->name('twitter');
Route::get('/youtube', [YoutubeController::class, 'index'])->name('youtube');
Route::get('/linkedin', [LinkedinController::class, 'index'])->name('linkedin');
});
});
Route::group([
'prefix' => 'profile',
], function () {
Route::get('/my-account', [MyAccountController::class, 'index'])->name('profile.index');
Route::put('/my-account', [MyAccountController::class, 'update'])->name('profile.update');
});
Route::group([
'as' => 'admin.',
'prefix' => 'admin',
'namespace' => 'App\Http\Controllers\Admin'
], function () {
Route::group([
'prefix' => 'users',
'as' => 'user.',
'namespace' => 'Users'
], function () {
Route::group([
'prefix' => 'invitaciones',
'as' => 'invitations.'
], function () {
Route::get('/', [UserInvitationController::class, 'index'])->name('index');
Route::get('/crear', [UserInvitationController::class, 'create'])->name('invite');
Route::put('/{invitation}', [UserInvitationController::class, 'reInvite'])->name('update');
Route::post('/admin', [UserInvitationController::class, 'inviteAdmin'])->name('invite-admin');
Route::post('/account-manager', [UserInvitationController::class, 'inviteAccountManager'])->name('invite-account-manager');
Route::post('/analyst', [UserInvitationController::class, 'inviteAnalyst'])->name('invite-analyst');
Route::delete('/bulk-delete', [UserInvitationController::class, 'bulkDelete'])->name('bulk-delete');
Route::delete('/{invitation}', [UserInvitationController::class, 'delete'])->name('delete');
});
Route::group([
'prefix' => 'admins',
'as' => 'admin.'
], function () {
Route::get('/', [UserAdminController::class, 'index'])->name('index');
Route::get('/{user}/editar', [UserAdminController::class, 'edit'])->name('edit');
Route::delete('/bulk-delete', [UserAdminController::class, 'bulkDelete'])->name('bulk-delete');
Route::delete('/{user}', [UserAdminController::class, 'delete'])->name('delete');
Route::put('/bulk-restore', [UserAdminController::class, 'bulkRestore'])->name('bulk-restore')->withTrashed();
Route::put('/{user}/restore', [UserAdminController::class, 'restore'])->name('restore')->withTrashed();
Route::put('/{user}', [UserAdminController::class, 'update'])->name('update');
});
Route::group([
'prefix' => 'account-managers',
'as' => 'account-manager.'
], function () {
Route::get('/', [UserAccountManagerController::class, 'index'])->name('index');
Route::get('/{user}/editar', [UserAccountManagerController::class, 'edit'])->name('edit');
Route::delete('/bulk-delete', [UserAccountManagerController::class, 'bulkDelete'])->name('bulk-delete');
Route::delete('/{user}', [UserAccountManagerController::class, 'delete'])->name('delete');
Route::put('/bulk-restore', [UserAccountManagerController::class, 'bulkRestore'])->name('bulk-restore')->withTrashed();
Route::put('/{user}/restore', [UserAccountManagerController::class, 'restore'])->name('restore')->withTrashed();
Route::put('/{user}', [UserAccountManagerController::class, 'update'])->name('update');
});
Route::group([
'prefix' => 'analysts',
'as' => 'analyst.'
], function () {
Route::get('/', [UserAnalystController::class, 'index'])->name('index');
Route::get('/{user}/editar', [UserAnalystController::class, 'edit'])->name('edit');
Route::delete('/bulk-delete', [UserAnalystController::class, 'bulkDelete'])->name('bulk-delete');
Route::delete('/{user}', [UserAnalystController::class, 'delete'])->name('delete');
Route::put('/bulk-restore', [UserAnalystController::class, 'bulkRestore'])->name('bulk-restore')->withTrashed();
Route::put('/{user}/restore', [UserAnalystController::class, 'restore'])->name('restore')->withTrashed();
Route::put('/{user}', [UserAnalystController::class, 'update'])->name('update');
});
});
});
});
尝试了所有方法,但为新用户设置密码后没有记录。它只是将我发送到登录视图。
尝试
public function store(Request $request, CreatesNewUsers $creator): RegisterResponse
{
event(new Registered($user = $creator->create($request->all())));
Auth::login($user); // replace $this->guard->login
return app(RegisterResponse::class);
}