簡體   English   中英

注冊用戶后重定向到登錄頁面。 拉拉韋爾5.5

[英]Redirect to login page after a user is registered. laravel 5.5

在用戶在我的Web應用程序上注冊並顯示消息“我們已在“用戶電子郵件”上向您發送了鏈接。請檢查您的電子郵件以完成注冊”后,如何重定向到登錄頁面。 通過使用laravel 5.5版本

注意:我已經使用laravel 5.5的Auth procress完成了登錄和注冊。

RegisterController

namespace App\Http\Controllers\Auth;
use App\Events\UserReferred;
use App\Profile;
use App\Reflink;
use App\Http\Controllers\Controller;
use App\Settings;
use App\User;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;

class RegisterController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    */

    use RegistersUsers;

    /**
     * Where to redirect users after registration.
     *
     * @var string
     */
    protected $redirectTo = '/verify/logout';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',

        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return \App\User
     */
    protected function create(array $data)
    {

        $settings = Settings::first();

        $user = User::create([

            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
            'admin'=>0,
            'active'=>0,
            'membership_id'=>1,
            'membership_started'=>date('Y-m-d'),
            'membership_expired'=>'2020-12-31',
            'token'=>str_random(25),

        ]);

        Profile::create([

            'user_id'=>$user->id,
            'avatar'=>'uploads/avatars/default.jpg',
            'main_balance'=>$settings->signup_bonus,
        ]);

        Reflink::create([

            'user_id'=> $user->id,
            'link'=> str_random(4).$user->id.str_random(4),

        ]);

        $user->sendVerificationEmail();

        event(new UserReferred(request()->cookie('ref'), $user));

        session()->flash('message', 'Dear user your account create successful but not active. To active your account please check your email for verify code.');
        Session::flash('type', 'warning');
        Session::flash('title', 'Email Verify Required');


        return $user;
    }
}

用戶成功注冊后,將觸發已Registered事件。 因此,在您的RegisterController您可以覆蓋已registered方法並從此處注銷用戶:

protected function registered( Request $request, $user )
{
    Auth::logout(); // don't forget to import the facade at the top of the class use Auth;
}

但是更好的方法是使用verified中間件,因為您正在使用Laravel的驗證選項。

因此,將您的受保護路線圍成一個組:

Route::middleware([ 'auth', 'verified' ])->group(function () {
    // your routes here.
});

因此,即使用戶在注冊后直接登錄,他也無法訪問任何路由,除非他驗證電子郵件。

我建議您在使用Laravel 5.X時應該考慮升級到5.7,因為它帶有內置的電子郵件驗證系統,如此處所示並且具有保護路由的中間件功能( middleware('verified'); ),事件,視圖和驗證后重定向。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM