Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?

merhaba nuxt ve laravel ile proje geliştirdim.Oturum işlemlerini laravel/sanctum kullandım. Localde hiç bir sorun yok ama laraveli güzel hosting de sunucuya yükledim nuxt projesinide heroku da deploy ettim. fakat şöyle bir sorun oluştu localde login olunduğunda 200 dönüp user endpointine istek atıyor ve login gerçekleşiyor. Fakat canlıda nedense login e istek atıyor status 200 dönüyor response da dönüyor ama login olmuyor token da oluşturmuyor user a da istek atmıyor. postmanle canlıda ki domain e istek atınca login oluyor ama

Localdeki api auth yapıları

SESSION_DOMAIN=localhost
SANCTUM_STATEFUL_DOMAINS=localhost:3000,localhost:8000

Canlıya alınca orayı şu şekilde değiştirdim.

SESSION_DOMAIN=https://123.com
SANCTUM_STATEFUL_DOMAINS=https://asd.com,https://123.com

https://asd.com - NUXT projesi
https://123 - LARAVEL projesi

cors.php de bi sorun yok dediğim gibi localde sıkıntısız çalışıyor

    'paths' => ['*'],

    'allowed_methods' => ['*'],

    'allowed_origins' => ['*'],

    'allowed_origins_patterns' => [],

    'allowed_headers' => ['*'],

    'exposed_headers' => [],

    'max_age' => 0,

    'supports_credentials' => true,

nuxt.config.js

  auth: {
    strategies: {
      laravelSanctum: {
        provider: 'laravel/sanctum',
        url: 'https://123.com',
        endpoints: {
          login: {
            url: '/api/login'
        }
      },
    }
  },

  // Axios module configuration: https://go.nuxtjs.dev/config-axios
  axios: {
    baseURL: 'https://123.com/',
  },

Dediğim gibi login işlemi 200 dönüyor fakat user a istek atmıyor ve login olmuyor fakat response da susscess dönüyor. postmanle canlıda ki domain e istek atınca login oluyor ama


    omeruzer Backend ile frontend ayrı domainlerde olduğunda cookie kullanamayacağı için login işleminde token dönüp bu token'ı Authorization: Bearer <token> şeklinde header değeri ekleyerek kullanmalısınız.

      mgsmus o token ı oluşturuyorum response da da development kısmında kullanmak için döndürüyorum. localde sorun çıkarmıyordu ama live da sıkıntı çıkarıyor

        omeruzer localde aynı domain altında çalıştığınız için token'ı cookie içinde kontrol ediyor. Bu Sanctum'u diğer geleneksel auth çözümlerinden ayıran özelliği. Farklı domaine geçince sizden header içinde Authorization: Bearer <token> şeklinde token bekliyor artık. Sizin Nuxt ile yazdığınız uygulamanın artık mobil uygulamadan bir farkı yok.

          mgsmus ben ama iki ayrı proje olarak çalışıyordum nuxt ayrı laravel ayrı backend i 8000 port unda nuxt ı 3000 portunda olarak çalışıyordum ayrılardı yani yine localde

            mgsmus yani benim bu durumda bu sorunu çözmek için ne yapmam gerekiyor tam anlayamadım da

              sineld, başlığı Nuxt-Laravel Live Auth System olarak değiştirdi.

              omeruzer login adresine istek attıktan sonra frontend tarafında token'ı tutup axios'a vereceksiniz:

              const token = ...
              
              axios.defaults.headers.common["Authorization"] = `Bearer ${token}`;

              gibi. Böylece axios her istekte token da gönderecek.

              Frontend tarafında token localStorage'de mi tutulmalı başka şekilde mi tutulmalı vs bir çok tartışma var. Bunu araştırarak frontend tarafında token'ı nasıl tutacağınıza karar verebilirsiniz.

                mgsmus bu şekilde mi yapılması lazım bu şekilde işe yaramadı çünkü yine 200 dönüyor ama login olmuyor

                    async login() {
                      await this.$auth
                        .loginWith("laravelSanctum", { data: this.form })
                        .then((result) => {
                          if (result.data.message == "Success") {
                            this.$axios.defaults.headers.common["Authorization"] = `Bearer ${response.data.token}`;
                            this.$router.push("/dashboard");
                          } else {
                            this.isError = true;
                          }
                        })
                        .catch((err) => {
                          this.isError = true;
                        });
                    },

                token ı response.data.token olarak döndürüyorum

                  omeruzer login olma diye bir şey yok, o stateful uygulamalara ait bir terim. Siz artık stateless ilerliyorsunuz, sunucuda sizi tutan bir yapı yok, o yüzden sizi tanımak için sizden her istekte token bekliyor. Vue router kullanmışsınız, demek ki her rota isteğinden önce token kontrolü de yapmanız gerekiyor:
                  https://router.vuejs.org/guide/advanced/navigation-guards.html

                    mgsmus vue değilde nuxt kullandım middleware var

                    export default async function ({ $auth, redirect }) {
                      const user = await $auth.loggedIn
                      if (user) {
                        // let the user see the page
                      } else {
                        // redirect to homepage
                        redirect('/')
                      }
                    }

                    bu şekilde nuxt ın özel yapılarıyla kontrol ediyorum fakat sorun login olduktan sonra oluşturduğum token oluşuyor ama devam etmiyor işlemler

                      omeruzer Nuxt dokümanlarına baktım, Sanctum için provider varmış. Nuxt kullanmadığım için bunu bilmiyordum, sizin kodlar şimdi anlam kazandı benim tarafta. Sanctum sağlayıcısını inceledim, cookie şeması kullanıyormuş, dokümanda yazıyor ama siz ayrı domainlerde haberleşeceğiniz için siz local şema kullanacaksınız. Zaten dokümanda da "local is the default, credentials/token based scheme for flows like JWT" şeklinde belirtmiş:

                      https://auth.nuxtjs.org/schemes/local

                      auth: {
                        strategies: {
                          local: {
                            token: {
                              property: 'token',
                              global: true,
                              // required: true,
                              // type: 'Bearer'
                            },
                            user: {
                              property: 'user',
                              // autoFetch: true
                            },
                            endpoints: {
                              login: { url: '/api/auth/login', method: 'post' },
                              logout: { url: '/api/auth/logout', method: 'post' },
                              user: { url: '/api/auth/user', method: 'get' }
                            }
                          }
                        }
                      }

                        mgsmus Login sorununu şu şekilde çözdüm.

                            async login() {
                              await this.$axios.$get("/sanctum/csrf-cookie");
                              await this.$axios
                                .post("https://123.com/api/login", {
                                  email: this.email,
                                  password: this.password,
                                })
                                .then((resp) => {
                                  this.$auth.setUserToken("local", "Bearer " + resp.data.token);
                                  this.$axios.setHeader("Authorization", "Bearer " + resp.data.token);
                                  this.$auth.ctx.app.$axios.setHeader(
                                    "Authorization",
                                    "Bearer " + resp.data.token
                                  );
                                  this.$axios.get("https://123.com/api/user").then((res) => {
                                    this.$auth.setUser(res.data);
                                    this.$router.push("/dashboard");
                                  });
                                });
                            },

                        fakat şu şekilde user a istek atıyor ama 401 dönüyor. token ı eklediğimde sorun çözülücek gibi bu fonksiyonu internette buldum

                          omeruzer Yani benim verdiğim cevabı dikkate almadınız 😅 Sağlık olsun, kolay gelsin.

                            mgsmus yok sizinkine bakıyorum şuanda 😃 o şekil ilerlemeye çalışıyorum sizden cevap beklerken bulmuştum 😃