通过电子邮件确认注册完成后尝试自动登录用户

问题描述 投票:0回答:1

使用确认电子邮件通过用户邀请创建密码后,用户不会自动登录。我尝试在 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');
            });
        });
    });
});

尝试了所有方法,但为新用户设置密码后没有记录。它只是将我发送到登录视图。

php laravel authentication fortify jetstream
1个回答
0
投票

尝试

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.