Laravel เปลี่ยนเส้นทางกลับไปยังปลายทางดั้งเดิมหลังจากเข้าสู่ระบบ


189

ดูเหมือนว่าจะเป็นระบบพื้นฐานที่ดีและLaravelมีวิธีแก้ปัญหาที่ดีสำหรับสิ่งพื้นฐานฉันรู้สึกว่าฉันขาดอะไรไป

ผู้ใช้คลิกลิงค์ที่ต้องมีการตรวจสอบ ตัวกรองรับรองความถูกต้องของ Laravel จะเปิดใช้งานและกำหนดเส้นทางไปยังหน้าเข้าสู่ระบบ ผู้ใช้เข้าสู่ระบบจากนั้นไปที่หน้าดั้งเดิมที่พวกเขาพยายามจะไปก่อนที่จะเปิดตัวกรอง 'รับรองความถูกต้อง'

มีวิธีที่ดีที่จะรู้ว่าพวกเขาพยายามจะไปที่หน้าเดิมหรือไม่? เนื่องจาก Laravel เป็นสิ่งที่ขัดขวางการร้องขอฉันจึงไม่รู้ว่าจะติดตามที่ไหนสักแห่งเพื่อการกำหนดเส้นทางที่ง่ายหลังจากที่ผู้ใช้ลงชื่อเข้าใช้

ถ้าไม่ฉันอยากรู้ว่าพวกคุณบางคนนำสิ่งนี้ไปใช้ด้วยตนเองได้อย่างไร

คำตอบ:


234

สำหรับ Laravel 5.3 ขึ้นไป

ตรวจสอบคำตอบของ Scottด้านล่าง

สำหรับ Laravel 5 สูงถึง 5.2

พูดง่าย ๆ

บนมิดเดิลแวร์รับรองความถูกต้อง:

// redirect the user to "/login"
// and stores the url being accessed on session
if (Auth::guest()) {
    return redirect()->guest('login');
}
return $next($request);

ในการดำเนินการเข้าสู่ระบบ:

// redirect the user back to the intended page
// or defaultpage if there isn't one
if (Auth::attempt(['email' => $email, 'password' => $password])) {
    return redirect()->intended('defaultpage');
}

สำหรับ Laravel 4 (คำตอบเก่า)

ในช่วงเวลาของคำตอบนี้ไม่มีการสนับสนุนอย่างเป็นทางการจากกรอบการทำงาน ทุกวันนี้คุณสามารถใช้วิธีการชี้โดย bgdrl ด้านล่างวิธีนี้: (ฉันได้ลองอัปเดตคำตอบของเขาแล้ว แต่ดูเหมือนว่าเขาจะไม่ยอมรับ)

ในตัวกรองรับรองความถูกต้อง:

// redirect the user to "/login"
// and stores the url being accessed on session
Route::filter('auth', function() {
    if (Auth::guest()) {
        return Redirect::guest('login');
    }
});

ในการดำเนินการเข้าสู่ระบบ:

// redirect the user back to the intended page
// or defaultpage if there isn't one
if (Auth::attempt(['email' => $email, 'password' => $password])) {
    return Redirect::intended('defaultpage');
}

สำหรับ Laravel 3 (คำตอบที่เก่ากว่า)

คุณสามารถใช้มันได้เช่นนี้

Route::filter('auth', function() {
    // If there's no user authenticated session
    if (Auth::guest()) {
        // Stores current url on session and redirect to login page
        Session::put('redirect', URL::full());
        return Redirect::to('/login');
    }
    if ($redirect = Session::get('redirect')) {
        Session::forget('redirect');
        return Redirect::to($redirect);
    }
});
// on controller
public function get_login()
{
    $this->layout->nest('content', 'auth.login'); 
}

public function post_login()
{
    $credentials = [
        'username' => Input::get('email'),
        'password' => Input::get('password')
    ];

    if (Auth::attempt($credentials)) {
        return Redirect::to('logged_in_homepage_here');
    }

    return Redirect::to('login')->with_input();
}

การจัดเก็บการเปลี่ยนเส้นทางในเซสชันมีประโยชน์ในการคงไว้แม้ว่าผู้ใช้จะพลาดการพิมพ์ข้อมูลประจำตัวของเขาหรือเขาไม่มีบัญชีและต้องลงทะเบียน

นอกจากนี้ยังช่วยให้สิ่งอื่นนอกเหนือจาก Auth ตั้งค่าการเปลี่ยนเส้นทางในเซสชันและจะทำงานได้อย่างน่าอัศจรรย์


จะไม่เหมาะสมกว่าหรือไม่ที่จะเข้าสู่เซสชันแทนที่จะใส่แล้วลืม การดำเนินการเข้าสู่ระบบของคุณจะส่งคืนการเปลี่ยนเส้นทางไปยังค่าในเซสชันหากมีอยู่หรือหน้าเริ่มต้นเป็นอย่างอื่น
bilalq

2
ฉันได้แก้ไขคำตอบเพื่ออธิบายว่าทำไมแฟลชนี้ถึงดีกว่า
vFragosop

นั่นทำให้รู้สึก ดีกว่าการย้อนแต่ละครั้ง
bilalq

1
เมื่อ Auth :: พยายาม () ผ่านคุณสามารถเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าเริ่มต้น (ปกติคือบ้านของเขา) การเปลี่ยนเส้นทางนั้นจะผ่านตัวกรองนั้นอีกครั้งและมันจะเปลี่ยนเส้นทางเขาไปยัง URL ที่ร้องขอดั้งเดิมหากมี ไม่เช่นนั้นจะแสดงผลที่บ้านของเขาต่อไป ฉันจะใส่ตัวอย่างของการดำเนินการเข้าสู่ระบบ
vFragosop

1
ใน 5.1 อยู่ในมิดเดิลแวร์ RedirectIfAuthenticated.php: if ($ this-> auth-> check ()) {return redirect ('/ privatepage'); }
Dave Driesmans

73

Laravel> = 5.3

การเปลี่ยนแปลง Auth ใน 5.3 ทำให้การดำเนินการนี้ง่ายขึ้นเล็กน้อยและแตกต่างจาก 5.2 เล็กน้อยเล็กน้อยเนื่องจาก Auth Middleware ถูกย้ายไปยังเซอร์วิสคอนเทนเนอร์

แก้ไขตัวเปลี่ยนเส้นทาง Middleware auth ใหม่

/app/Http/Middleware/RedirectIfAuthenticated.php

เปลี่ยนฟังก์ชั่นการจัดการเล็กน้อยดังนั้นดูเหมือนว่า:

public function handle($request, Closure $next, $guard = null)
{
    if (Auth::guard($guard)->check()) {
        return redirect()->intended('/home');
    }

    return $next($request);
}

TL; DR คำอธิบาย

ข้อแตกต่างอยู่ในบรรทัดที่ 4 เท่านั้น โดยค่าเริ่มต้นดูเหมือนว่านี้:

return redirect("/home");

เนื่องจาก Laravel> = 5.3 จะบันทึกเส้นทาง "เจตนา" ล่าสุดโดยอัตโนมัติเมื่อตรวจสอบ Auth Guard จึงเปลี่ยนเป็น:

return redirect()->intended('/home');

นั่นคือการบอกให้ Laravel เปลี่ยนเส้นทางไปยังหน้าที่ตั้งใจไว้ล่าสุดก่อนเข้าสู่ระบบไม่เช่นนั้นจะไปที่ "/ home" หรือที่ใดก็ตามที่คุณต้องการส่งโดยค่าเริ่มต้น

หวังว่านี่จะช่วยคนอื่น - มีไม่มากในความแตกต่างระหว่าง 5.2 และ 5.3 และในพื้นที่นี้โดยเฉพาะมีค่อนข้างน้อย


2
สำหรับ Laravel 6.4 นี่ไม่ทำงานอีกต่อไป ... ความคิดใด ๆ กรุณา?
alex toader

ฉันจะใช้return redirect()->intended(RouteServiceProvider::HOME);เส้นทางบ้านของคุณในที่เดียว
Mateusz

26

ฉันพบวิธีการที่ยอดเยี่ยมทั้งสองที่อาจเป็นประโยชน์กับคุณอย่างยิ่ง

Redirect::guest();
Redirect::intended();

คุณสามารถใช้ตัวกรองนี้กับเส้นทางที่ต้องมีการรับรองความถูกต้อง

Route::filter('auth', function()
{
    if (Auth::guest()) {
           return Redirect::guest('login');
    }
});

วิธีการนี้โดยทั่วไปคือการจัดเก็บหน้าที่คุณพยายามเข้าชมและจะนำคุณไปยังหน้าเข้าสู่ระบบ

เมื่อผู้ใช้รับรองความถูกต้องคุณสามารถโทร

return Redirect::intended();

และมันจะนำคุณไปยังหน้าที่คุณพยายามเข้าถึงในตอนแรก

เป็นวิธีที่ดีในการทำแม้ว่าฉันมักจะใช้วิธีการด้านล่าง

Redirect::back()

คุณสามารถตรวจสอบนี้บล็อกที่น่ากลัว


นี่ดีกว่าการแก้ปัญหาข้างต้น การแก้ปัญหาข้างต้นต้องการความสามารถในการปิดการใช้งานฟังก์ชั่นเข้าสู่ระบบซึ่งฉันไม่สามารถทำได้ด้วย 4.1 แต่มันง่ายและทำงานได้ดีกว่า
user2662680

20

คุณอาจใช้ฟังก์ชันRedirect :: ตั้งใจ มันจะเปลี่ยนเส้นทางผู้ใช้ไปยัง URL ที่พวกเขาพยายามเข้าถึงก่อนที่จะถูกดักจับโดยตัวกรอง authenticaton URI สำรองอาจมอบให้กับวิธีนี้ในกรณีที่ destinaton ที่ตั้งใจไม่สามารถใช้ได้

ในโพสต์เข้าสู่ระบบ / ลงทะเบียน:

return Redirect::intended('defaultpageafterlogin');

11

ฉันเคยใช้สิ่งนี้มาระยะหนึ่งแล้วบนรหัสตัวเลือกภาษาของฉัน ตราบใดที่คุณต้องย้อนกลับไปเพียง 1 หน้ามันก็ใช้ได้ดี:

return Redirect::to(URL::previous());

มันไม่ใช่ทางออกที่ทรงพลังที่สุด แต่มันง่ายสุด ๆ และสามารถช่วยไขปริศนาบางอย่างได้ :)


5
ใช่ก่อนหน้า () ทำงานได้ดี แต่ถ้าความพยายามในการเข้าสู่ระบบครั้งแรกของคุณล้มเหลว (หน้า 'เข้าสู่ระบบล้มเหลว' กลายเป็นหน้าก่อนหน้าของคุณ) และความพยายามในการเข้าสู่ระบบครั้งที่สองประสบความสำเร็จคุณจะถูกเปลี่ยนเส้นทางไปยังหน้าเข้าสู่ระบบอีกครั้ง
Shriganesh Shintre

11

เปลี่ยน Constructor ของ LoginControllers เป็น:

public function __construct()
    {
        session(['url.intended' => url()->previous()]);
        $this->redirectTo = session()->get('url.intended');

        $this->middleware('guest')->except('logout');
    }

มันจะนำคุณกลับไปที่หน้าก่อนหน้าเข้าสู่ระบบ (2 หน้ากลับ)


คนเดียวที่เหมาะกับฉัน ต้องหมายความว่าฉันมีการเปลี่ยนเส้นทางเกิดขึ้นที่อื่น แต่ใครจะไปรู้ว่าที่ไหน
Arthur Tarasov

8
return Redirect::intended('/');

สิ่งนี้จะนำคุณไปสู่หน้าเริ่มต้นของโครงการเช่นหน้าเริ่มต้น



5

Laravel 3

ฉัน tweaked รหัส (Vinícius Fragoso Pinheiro) ของคุณเล็กน้อยแล้ววางสิ่งต่อไปนี้ใน filters.php

Route::filter('auth', function()
{
    // If there's no user authenticated session
    if (Auth::guest()) {
        // Flash current url to session and redirect to login page
        Session::flash('redirect', URL::full());
        return Redirect::guest('login');
    }
});

แล้วภายใน AuthController.php ของฉัน:

// Try to log the user in.
if (Auth::attempt($userdata)) {

    if ($redirect = Session::get('redirect')) {
        return Redirect::to($redirect);
    } else {
        // Redirect to homepage
        return Redirect::to('your_default_logged_in_page')->with('success', 'You have logged in successfully');
    }
} else {
    // Reflash the session data in case we are in the middle of a redirect 
    Session::reflash('redirect');

    // Redirect to the login page.
    return Redirect::to('login')->withErrors(['password' => 'Password invalid'])->withInput(Input::except('password'));
}

ขอให้สังเกตว่า'redirect'ข้อมูลเซสชันถูก reflashed ถ้ามีปัญหาการรับรองความถูกต้อง สิ่งนี้จะช่วยให้การเปลี่ยนเส้นทางยังคงเหมือนเดิมในระหว่างการล็อกอินผิดพลาด แต่หากผู้ใช้คลิกไปที่จุดใดก็ตามกระบวนการล็อกอินครั้งต่อไปจะไม่ถูกขัดจังหวะโดยข้อมูลเซสชัน

นอกจากนี้คุณยังต้อง reflash ข้อมูล ณ จุดที่แสดงแบบฟอร์มการเข้าสู่ระบบของคุณAuthControllerมิฉะนั้นสายการบินจะขาด:

public function showLogin()
{
    // Reflash the session data in case we are in the middle of a redirect 
    Session::reflash('redirect');

    // Show the login page
    return View::make('auth/login');
}


0

Larvel 5.3 ใช้ งานได้จริงสำหรับฉันเพียงแค่อัปเดต LoginController.php

 use Illuminate\Support\Facades\Session;
 use Illuminate\Support\Facades\URL;


public function __construct()
{
    $this->middleware('guest', ['except' => 'logout']);
    Session::set('backUrl', URL::previous());
}


public function redirectTo()
{
    return Session::get('backUrl') ? Session::get('backUrl') :   $this->redirectTo;
}

อ้างอิง: https://laracasts.com/discuss/channels/laravel/redirect-to-previous-page-after-login


0

สำหรับLaravel 5.5และอาจ 5.4

ในแอป \ Http \ Middleware \ Redirect หากมีการเปลี่ยนแปลงที่ถูกredirect('/home')ต้องไปยังredirect()->intended('/home')ฟังก์ชันการจัดการ:

public function handle($request, Closure $next, $guard = null)
{
    if (Auth::guard($guard)->check()) {
        return redirect()->intended('/home');
    }

    return $next($request);
}

ในApp \ Http \ Controllers \ Auth \ LoginControllerสร้างshowLoginForm()ฟังก์ชั่นดังต่อไปนี้:

public function showLoginForm()
{
    if(!session()->has('url.intended'))
    {
        session(['url.intended' => url()->previous()]);
    }
    return view('auth.login');
}

ด้วยวิธีนี้หากมีเจตนาสำหรับหน้าอื่นมันจะเปลี่ยนเส้นทางที่นั่นมิฉะนั้นจะเปลี่ยนเส้นทางบ้าน


0

ฉันใช้วิธีการต่อไปนี้กับตัวควบคุมการเข้าสู่ระบบที่กำหนดเองและมิดเดิลแวร์สำหรับ Laravel 5.7 แต่ฉันหวังว่าจะใช้ได้กับ laravel 5 รุ่นใดก็ได้

  • ภายในมิดเดิลแวร์

    if (Auth::check()){
        return $next($request);
    }
    else{
      return redirect()->guest(route('login'));
    }
  • วิธีการล็อกอินภายในคอนโทรลเลอร์

    if (Auth::attempt(['email' => $email, 'password' => $password])) {
    return redirect()->intended('/default');
    }
  • หากคุณต้องการส่ง URL ที่ตั้งใจไปยังฝั่งไคลเอ็นต์คุณสามารถลองทำสิ่งต่อไปนี้

       if (Auth::attempt(['username' => $request->username, 'password' => $request->password])) {
           $intended_url= redirect()->intended('/default')->getTargetUrl();
           $response = array(
          'status' => 'success',
          'redirectUrl' => $intended_url,
          'message' => 'Login successful.you will be redirected to home..', );
          return response()->json($response);
        } else {
            $response = array(
          'status' => 'failed',
          'message' => 'username or password is incorrect', );
         return response()->json($response);
        }

0

ก่อนอื่นคุณควรทราบว่าคุณเปลี่ยนเส้นทางผู้ใช้ไปยังเส้นทาง 'เข้าสู่ระบบ' ได้อย่างไร:

return redirect()->guest('/signin');

ไม่เหมือน:

return redirect()->intended('/signin');

0

Laravel สนับสนุนคุณสมบัตินี้ทันที! (ฉันเชื่อตั้งแต่ 5.5 หรือเร็วกว่า)

เพิ่ม__construct()วิธีการของคุณControllerตามที่แสดงด้านล่าง:

public function __construct()
{
    $this->middleware('auth');
}

หลังจากเข้าสู่ระบบผู้ใช้ของคุณจะถูกเปลี่ยนเส้นทางไปยังหน้าเว็บที่พวกเขาตั้งใจจะเข้าชมครั้งแรก

คุณยังสามารถเพิ่มคุณสมบัติการตรวจสอบอีเมลของ Laravel ได้ตามที่ตรรกะของแอปพลิเคชันของคุณต้องการ:

public function __construct()
{
    $this->middleware(['auth', 'verified']);
}

เอกสารประกอบมีตัวอย่างสั้น ๆ :

นอกจากนี้ยังเป็นไปได้ที่จะเลือกวิธีการของตัวควบคุมที่มิดเดิลแวร์ใช้กับโดยใช้except หรือonlyตัวเลือก

ตัวอย่างด้วยexcept:

public function __construct()
{
    $this->middleware('auth', ['except' => ['index', 'show']]);
}

ตัวอย่างด้วยonly:

public function __construct()
{
    $this->middleware('auth', ['only' => ['index', 'show']]);
}

ข้อมูลเพิ่มเติมเกี่ยวกับexceptและonlyตัวเลือกมิดเดิลแวร์:


0

หากคุณกำลังใช้ axios หรือไลบรารีจาวาสคริปต์ AJAX อื่น ๆ คุณอาจต้องการดึง URL และส่งต่อไปยังส่วนหน้า

คุณสามารถทำได้ด้วยรหัสด้านล่าง

   $default = '/';

   $location = $request->session()->pull('url.intended', $default);

    return ['status' => 200, 'location' => $location];

นี่จะส่งคืนสตริงที่จัดรูปแบบ json


0

ใน Laravel 5.8

ใน App \ Http \ Controllers \ Auth \ LoginController เพิ่มวิธีการต่อไปนี้

public function showLoginForm()
{
    if(!session()->has('url.intended'))
        {
            session(['url.intended' => url()->previous()]);
        }
    return view('auth.login');
}

ในแอป \ Http \ Middleware \ RedirectIfAuthenticated แทนที่ "return redirect ('/ home');" ด้วยดังต่อไปนี้

 if (Auth::guard($guard)->check()) 
    {
        return redirect()->intended();
    }

-1

คุณลองสิ่งนี้ในเส้นทางของคุณหรือไม่

Route::group(['middleware' => ['web']], function () {
    //
    Route::get('/','HomeController@index');
});

-1
       // Also place this code into base controller in contract function,            because ever controller extends base  controller
 if(Auth::id) {
  //here redirect your code or function
 }
if (Auth::guest()) {
       return Redirect::guest('login');
}

2
โปรดให้ความเห็นเพื่อไปพร้อมกับรหัสของคุณเพื่อให้บริบท ขอบคุณ
Suever

-1

นี่คือทางออกของฉันสำหรับ 5.1 ฉันต้องการใครสักคนคลิกปุ่ม "ถูกใจ" ในโพสต์เปลี่ยนเส้นทางเพื่อเข้าสู่ระบบจากนั้นกลับสู่หน้าเดิม หากพวกเขาลงชื่อเข้าใช้แล้วhrefปุ่ม "ถูกใจ" จะถูกสกัดกั้นด้วย JavaScript และเปลี่ยนเป็นการร้องขอ AJAX

<a href="https://stackoverflow.com/like/931">Like This Post!</a>ปุ่มเป็นสิ่งที่ต้องการ /like/931ถูกจัดการโดย LikeController ที่ต้องการauthมิดเดิลแวร์

ในรับรองความถูกต้องมิดเดิลแวร์ ( handle()ฟังก์ชัน) เพิ่มสิ่งนี้ในตอนเริ่มต้น:

    if(!str_contains($request->session()->previousUrl(), "/auth/login")) {
        $request->session()->put('redirectURL', $request->session()->previousUrl());
        $request->session()->save();
    }

เปลี่ยน/auth/loginเป็น URL ของคุณสำหรับการเข้าสู่ระบบรหัสนี้จะบันทึก URL ของหน้าเดิมในเซสชันเว้นแต่ว่า URL นั้นจะเป็น URL สำหรับเข้าสู่ระบบ สิ่งนี้เป็นสิ่งจำเป็นเนื่องจากปรากฏว่าตัวกลางนี้ถูกเรียกสองครั้ง ฉันไม่แน่ใจว่าทำไมหรือถ้าเป็นจริง /auth/loginแต่ถ้าคุณไม่ได้ตรวจสอบเงื่อนไขนั้นก็จะเท่ากับหน้าเดิมที่ถูกต้องและได้รับการอย่างใดแล้วบังเอิญไป อาจมีวิธีที่สง่างามกว่านี้

จากนั้นในLikeControllerตัวควบคุมหรือสิ่งที่คุณมีที่จัดการ URL สำหรับปุ่มผลักบนหน้าเดิม:

//some code here that adds a like to the database
//...
return redirect($request->session()->get('redirectURL'));

วิธีนี้ง่ายมากไม่ต้องใช้การแทนที่ฟังก์ชั่นที่มีอยู่และใช้งานได้ดี มีความเป็นไปได้ที่ Laravel จะทำได้ง่ายกว่านี้ แต่ฉันไม่แน่ใจว่ามันคืออะไร ใช้intended()ฟังก์ชั่นไม่ทำงานในกรณีของฉันเพราะ LikeController จำเป็นต้องรู้ว่า URL ก่อนหน้านี้คืออะไรเพื่อเปลี่ยนเส้นทางกลับไปยังมัน เป็นหลักสองระดับของการเปลี่ยนเส้นทางไปข้างหลัง


-1

สำหรับ Laravel 5.2 (เวอร์ชั่นก่อนหน้านี้ฉันไม่ได้ใช้)

วางรหัสลงในแอปไฟล์ \ Http \ Controllers \ Auth \ AurhController.php

   /**
 * Overrides method in class 'AuthenticatesUsers'
 *
 * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
 */
public function showLoginForm()
{
    $view = property_exists($this, 'loginView')
        ? $this->loginView : 'auth.authenticate';
    if (view()->exists($view)) {
        return view($view);
    }
    /**
     * seve the previous page in the session
     */
    $previous_url = Session::get('_previous.url');
    $ref = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
    $ref = rtrim($ref, '/');
    if ($previous_url != url('login')) {
        Session::put('referrer', $ref);
        if ($previous_url == $ref) {
            Session::put('url.intended', $ref);
        }
    }
    /**
     * seve the previous page in the session
     * end
     */
    return view('auth.login');
}
/**
 * Overrides method in class 'AuthenticatesUsers'
 *
 * @param Request $request
 * @param $throttles
 *
 * @return \Illuminate\Http\RedirectResponse
 */
protected function handleUserWasAuthenticated(Request $request, $throttles)
{
    if ($throttles) {
        $this->clearLoginAttempts($request);
    }
    if (method_exists($this, 'authenticated')) {
        return $this->authenticated($request, Auth::guard($this->getGuard())->user());
    }
    /*return to the previous page*/
    return redirect()->intended(Session::pull('referrer'));
    /*return redirect()->intended($this->redirectPath()); /*Larevel default*/
}

และนำเข้าเนมสเปซ: use Session;

หากคุณไม่ได้ทำการเปลี่ยนแปลงใด ๆ กับแอพไฟล์ \ Http \ Controllers \ Auth \ AurhController.php คุณสามารถแทนที่มันด้วยไฟล์จากGitHub


-1

Laravel 5.2

หากคุณใช้ Middleware อื่นเช่น Middleware Adminคุณสามารถตั้งค่าเซสชันสำหรับurl.intended ได้โดยใช้สิ่งต่อไปนี้

โดยทั่วไปเราจำเป็นต้องตั้งค่าด้วยตนเอง \Session::put('url.intended', \URL::full());เพื่อเปลี่ยนเส้นทาง

ตัวอย่าง

  if (\Auth::guard($guard)->guest()) {
      if ($request->ajax() || $request->wantsJson()) {
         return response('Unauthorized.', 401);
      } else {
        \Session::put('url.intended', \URL::full());
        return redirect('login');
      }
  }

เมื่อพยายามเข้าสู่ระบบ

ตรวจสอบให้แน่ใจในการพยายามเข้าสู่ระบบใช้ return \Redirect::intended('default_path');


นั่นคือสิ่งที่redirect()->guest('login')มีไว้เพื่อ
Emile Bergeron

-1

สำหรับ Laravle 5.7 คุณต้องทำการเปลี่ยนแปลง:

มิดเดิ้ล> RedirectIfAuthenticated.php

เปลี่ยนสิ่งนี้:

public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            return redirect('/admin');
        }

        return $next($request);
    }

สำหรับสิ่งนี้:

public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            return redirect('/yourpath');
        }

        return $next($request);
    }

ส่งคืนการเปลี่ยนเส้นทาง ('/ yourpath');


คือmypathอะไร (ผู้ใช้ผ่านกลับไปที่สิ่งนี้)
Mostafa Norzade
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.