Laravel 5 AbstractProvider.php dosyasında InvalidStateException alma

Socialize kullanarak laravel 5 'de facebook ile giriş yapmayı deniyorum.

İşte rota dosya kodum.

Route::get('fb', function ($facebook = "facebook")
{
    $provider = \Socialize::with($facebook);      
    if (Input::has('code'))
    {
        $user = $provider->user();
        return var_dump($user);
    } else {
        return $provider->scopes(['public_profile','user_friends'])->redirect();
    }
});

login is success and I get the code but time of get $provider->user() I get the error.

AbstractProvider.php satır 161'deki InvalidStateException

8
161 numaralı hat nerede?
katma yazar Sverri M. Olsen, kaynak
@ SverriM.Olsen AbstractProvider.php varsayılan dosyadır ...!
katma yazar Dipesh Shihora, kaynak
Sorunun $ this-> request-> getSession() -> ger ('state') 'in AbstractProvider.php dosyasında boş döndüğü yer olduğunu gördüm
katma yazar Dipesh Shihora, kaynak

10 cevap

Sadece bir hataya işaret eden kodu yorumlamakta rahat değildim (@Dipesh Shihora'nın cevabında olduğu gibi), bu yüzden biraz daha kazdım. Hataya (en azından benim durumumda) oturumlardaki bir sorunun neden olduğunu keşfettim.

Dev sunucum bu cevabı içinde verilen talimatlara göre ayarlandı. Temel olarak, herkese açık olarak erişilebilen bir adres gibi görünen bir geri arama URL'si kullanarak Google’a "sahtekarlık yapıyorum".

InvalidStateException sorunu benim için gözüküyordu çünkü giriş sayfamı http://localhost/login 'da ziyaret ediyordum ve Google'ın giriş sayfasına yönlendiriliyordum, sonra da beni http://myapp.example.com/callback . Sorun, oturum anahtarının bir çerezde saklanmasıdır - başlangıçta http://localhost için bir çerezdi, ancak farklı bir URL'ye yönlendirdiğimde çerez (ve dolayısıyla oturum anahtarı) erişilemezdi. Bu nedenle, oturum durum değeri güncelleme sonrasında mevcut değildi ve istisna atıldı.

Çözüm? Dev makineye tüm göz atmamın http://myapp.example.com adresinde yapıldığından ve http://localhost adresinde olmamasını sağlayın.

10
katma
tarama çözümlerinde bile alt alanlar bir soruna neden olabilir. Lütfen bu cevaba bakınız stackoverflow.com/questions/30660847/
katma yazar Mladen Janjetovic, kaynak
Güzel çözüm. Şimdi bu göz atma olayını nasıl düzelteceğimi çözmem gerekiyor.
katma yazar Chilion, kaynak
Kesinlikle en iyi çözüm!
katma yazar Corentin, kaynak
Harika, harika cevap için teşekkürler. Senin yüzünden şimdi bir bira açmaya devam edeceğim.
katma yazar Devin Norgarb, kaynak

http://nhagiaodich.com/dang-nhap

It work on my website , just call ->stateless() before get user

Socialite::driver('facebook')->stateless()->user()
Socialite::driver('google')->stateless()->user()
10
katma
evet vatansız ekledikten sonra çalışıyor ()
katma yazar iCoders, kaynak
Benim için çalıştı
katma yazar Maha Dev, kaynak
Çalışıyor teşekkür ederim ...
katma yazar Gautam Patadiya, kaynak
Neredeyse müşterim yüzünden bununla başım belaya girdi. Bir milyon @ nguyen teşekkürler
katma yazar FONGOH MARTIN, kaynak

Bunun için geçici bir çözüm buldum.

public function user()
{
    //if ($this->hasInvalidState()) {
   //   throw new InvalidStateException;
    //}

    $user = $this->mapUserToObject($this->getUserByToken(
        $token = $this->getAccessToken($this->getCode())
    ));
    return $user->setToken($token);
}

comment the $this->hasInvalidState() if condition in AbstractProvider.php file and it's work fine.

5
katma
Akıllı telefonda bu sorunu yaşıyorum ama masaüstünde değil. Teşekkür ederim. Hızlı hile.
katma yazar dlopezgonzalez, kaynak
@Mattias, zamanınız olduğunda burada güncelledikten sonra bana belirli bir neden veriyor, böylece burada güncellerim ve bunun için uygun bir çözüm buldum.
katma yazar Dipesh Shihora, kaynak
@Mattias bu yüzden bana bunun için bir çözüm verebilir misiniz?
katma yazar Dipesh Shihora, kaynak
@DipeshShihora Cevabımı gör.
katma yazar Mattias, kaynak
@DipeshShihora Henüz son bir çalışma çözümü bulamadım, hayır. Yine de birkaç ipucu buldum, örneğin, Oturum Çerez Alanınızı ayarlama ve ardından uygulama önbelleğini temizleme ya da Request sınıfını handleProviderCallback öğesine şu şekilde ekleme: handleProviderCallback (Illuminate \ Http \ Request $ request). Ama dediğim gibi, bu yöntemlerden hiçbirini henüz denemedim.
katma yazar Mattias, kaynak
Size hata veren kodu hiçbir zaman yorumlamamalısınız, bunun yerine hatayı düzeltmelisiniz. Downvoted.
katma yazar Mattias, kaynak
Benim için çalıştı. Daha iyi bir çözüm var mı ?
katma yazar Corentin, kaynak

config/session.php 'domain' alanındaki ve config'deki 'url' alanındaki doğru değerleri ayarlamayı deneyin /app.php . Bu benim için hile yapmış gibi görünüyor. session.php 'daki değerin http:// olmadığından, app.php içindeki değerin http://.

Ayrıca, bu kılavuzu izlemenizi öneririz: https://laracasts. com/dizi/neyin-new-in-laravel-5/bölüm/9 . Son derece yardımsever ve net.

3
katma
etki alanı sorun oluşturucuydu
katma yazar Edmund Sulzanok, kaynak
Emin. Sorun değil :)
katma yazar igs013, kaynak
Doğru. Buradaki tek sorun, bu soruyu gönderen ben değilim, bu yüzden cevabı doğru olarak işaretlemek biraz zor olabilir :)). Ancak yine de, yorum yapmadan önce cevabınızı oyladım: p.
katma yazar igs013, kaynak
Teşekkürler. etki alanı alanını ayarlamak benim için çalıştı. Bunu asla hatanın nedeni olarak hayal etmedim.
katma yazar igs013, kaynak
Temiz! Cevabı doğru olarak işaretlemekten çekinmeyin, konuyu yorumlamak yerine düzelttiği için :) Aynı problemle karşılaşan insanlara yardımcı olabilir.
katma yazar Mattias, kaynak
@ IvanciucGheorghe-Stefan Oops, nihayetinde :)
katma yazar Mattias, kaynak
$provider = \Socialize::with($facebook);      
if (Input::has('code'))     {
    $user = $provider->stateless()->user();
}

Belki bu daha iyi geçici bir çözümdür

2
katma
benim için çalıştı, ama soru neden $ sağlayıcı-> stateless() -> user ()? $ supplier-> user() yerine?
katma yazar loki9, kaynak

Bu yüzden, bazı kazılar yaptıktan sonra benim için meselenin nginx yapılandırmamın yanlış olduğu ve url parametrelerinin (kod ve durum) index.php dosyasına düzgün bir şekilde geçilmediği ve bu durumda oturumdan durum arasındaki kontrolün bulunmadığı tespit edildi. ve url’den gelen devlet başarısız oldu. Nginx conf'ımı böyle görünecek şekilde değiştirdim ve iyi çalıştı.

location/{
            try_files $uri $uri/ /index.php?$args;
    }
1
katma

Bu sorunu yaşayan herkes için, etki alanı değerini config/session.php içinde etki alanınıza ayarlayabilir ve tarayıcınızdaki uygulama url’inizle ilgili tüm çerezleri temizleyebilirsiniz. Ayrıca PHP esnaf önbellek çalıştırabilirsiniz: açık ve net-uyumlu

1
katma
Bu güzel bir çözüm. :) Teşekkürler.
katma yazar ssi-anik, kaynak

vendor/guzzlehttp/guzzle/src/Client.php adresine gidin

$defaults = [
            'allow_redirects' => RedirectMiddleware::$defaultSettings,
            'http_errors'     => true,
            'decode_content'  => true,
            'verify'          => true,
            'cookies'         => false
        ];

değişmek

$defaults = [
            'allow_redirects' => RedirectMiddleware::$defaultSettings,
            'http_errors'     => true,
            'decode_content'  => true,
            'verify'          => **false**,
            'cookies'         => false
        ];
1
katma

Bunun birisine yardımcı olup olmadığını bilmiyorum ama oturum sürücümü file 'dan çerez ' e değiştirmek benim için InvalidException sorununu çözdü.

0
katma

Bu hatayı alırsınız çünkü sosyal medya sağlayıcısı ayarlarınız config dosyanızda yanlış veya Facebook uygulamanızı doğru şekilde kurmamışsınızdır.

Developers.facebook.com adresini ziyaret edin ve uygulama kimliğinizin ve gizli anahtarlarınızın doğru olduğundan ve doğru URL'yi gösterdiğinden emin olun. Ardından laravel uygulamanızın services.php config dosyasının doğru yönlendirme, kimlik ve sır ile güncellendiğinden emin olun.

0
katma