Nuxt js โดยใช้พาสปอร์ต laravel เปลี่ยนเส้นทางไปยังหน้าเข้าสู่ระบบหลังจากรีเฟรชหน้าในหน้าที่ปลอดภัย
ฉันใช้หนังสือเดินทาง 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
มีใครรู้วิธีแก้ไหม
คำตอบ
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');
});
}
});
}
สำหรับข้อมูลเพิ่มเติมโปรดอ่านโพสต์นี้
ฉันเพิ่งประสบปัญหานี้เมื่อไม่นานมานี้ในขณะที่คำตอบนี้อาจไม่เป็นประโยชน์กับฝ่ายปฏิบัติการ แต่ฉันเชื่อว่ามันอาจเป็นประโยชน์กับผู้อื่นในอนาคต
นี่คือสิ่งที่เราทำด้านล่างภายใต้เส้นทาง 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);
ฉันเขียนเกี่ยวกับเรื่องนี้ในบล็อกของฉันที่นี่ด้วย