Nuxt js โดยใช้พาสปอร์ต laravel เปลี่ยนเส้นทางไปยังหน้าเข้าสู่ระบบหลังจากรีเฟรชหน้าในหน้าที่ปลอดภัย

Aug 19 2020

ฉันใช้หนังสือเดินทาง laravel สำหรับการตรวจสอบสิทธิ์ NUXT ของฉัน ฉันกำลังติดตามเอกสารนี้:

https://auth.nuxtjs.org/providers/laravel-passport.html#usage

ฉันสามารถเข้าสู่ระบบได้สำเร็จบน nuxt-app ของฉัน middleware:'auth'มันเปลี่ยนเส้นทางไปยังแผงควบคุมหลังจากเข้าสู่ระบบนั้นมีแดชบอร์ด ปัญหาคือ. เมื่อฉันรีเฟรชแดชบอร์ดมันจะเปลี่ยนเส้นทางกลับไปที่หน้าเข้าสู่ระบบ บนคอนโซล js $auth.isAuthenticatedส่งกลับค่า true แต่บน SSR เป็นเท็จ ฉันเดาว่าปัญหาอยู่ที่middleware:authฉันไม่แน่ใจ ฉันค้นหาใน google แล้ว แต่ไม่มีวิธีแก้ปัญหา ฉันลองแล้ว:

https://github.com/nuxt-community/auth-module/issues/478

รหัสของฉันมีลักษณะดังนี้:

การใช้ Laravel 7 Passport รับรองความถูกต้องกับ Nuxt frontend

มีใครรู้วิธีแก้ไหม

คำตอบ

1 StefanTanevski Aug 21 2020 at 11:08

http_onlyคุกกี้ไม่สามารถใช้ได้กับ SSR ดังนั้นคุณจะต้องสร้างปลั๊กอิน nuxt และที่นั่นคุณควรตรวจสอบว่าaccess_tokenไม่มีอยู่และuserมีอยู่ในคุกกี้หรือไม่ (เมื่อผู้ใช้เข้าสู่ระบบคุณควรสร้างคุกกี้ด้วยข้อมูลผู้ใช้หรือรหัสผู้ใช้โดยส่วนตัวฉันจะใช้ Vuex ร่วมกับvuex-persistedstate ) และหากผู้ใช้มีอยู่ในคุกกี้และaccess_tokenไม่มีอยู่คุณควรรีเฟรชโทเค็น

plugins/refresh-token.js

import clientCookies from 'js-cookie';

/**
 * For refreshing the token on page reload.
 *
 * @param  {Object} context.store
 * @return {Void}
 */
export default function ({store}) {
  window.onNuxtReady(() => {
    let token = clientCookies.get('x-access-token');
    let user = store.getters['user/currentUser'];

    if (user && ! token) {
      store.dispatch('auth/refreshToken')
        .catch(errors => {
          store.dispatch('auth/signUserOut');
        });
    }
  });
}

สำหรับข้อมูลเพิ่มเติมโปรดอ่านโพสต์นี้

OlumideOmotoso Sep 15 2020 at 12:54

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

นี่คือสิ่งที่เราทำด้านล่างภายใต้เส้นทาง API ของคุณซึ่งสามารถพบได้ใน route / api.php เพิ่มโดเมน nuxt js เข้าถึง api แอปพลิเคชัน laravel ใช้รหัสด้านล่าง - ตรวจสอบให้แน่ใจว่าคุณจัดรูปแบบเฉพาะสำหรับกรณีการใช้งานของคุณ

$landingRoutes = function () { //your routes }; Route::group(['domain' => config('app.DASHBOARD_DOMAIN1')], $landingRoutes);
Route::group(['domain' => config('app._DASHBOARD_DOMAIN2')], $landingRoutes);

ฉันเขียนเกี่ยวกับเรื่องนี้ในบล็อกของฉันที่นี่ด้วย