Přihlašování na web pomocí sociálních sítí
Ahoj, v PHP dělám přihlašování přes sociální sítě google, facebook a microsoft. Používám nette a tyto knihovny:
guzzlehttp/guzzle
facebook/graph-sdk
google/apiclient
league/oauth2-client
microsoft/microsoft-graph
Na localu mi to dokonale funguje, ale dal jsem to na ostrý web a nejde ani jedno.
U google dostávám chybu při získávání dat usera (Google_Service_Oauth2->userinfo->get()):
Client error: `POST https://oauth2.googleapis.com/token` resulted in a `400 Bad Request` response: { "error": "invalid_grant", "error_description": "Bad Request" }
U Microsoftu dostávám chybu:
invalid_grant (AADSTS70000 The provided value for the 'code' parameter is not valid)
U facebooku nastane chyba když se snažím z short-lived access tokenu udělat long-life (->getLongLivedAccessToken($accessToken)):
This authorization code has been used
Jen u facebooku se mi přihlašování povedlo rozchodit, protože jsem zatím zrušil požadavek na long-life access token.
Začínám mít pocit, že je to nějaký problém na serveru, ale nevím jaký - php konfigurace je +- stejná, jen já používám php 7.1 a na webu je php 5.6. Pak jsem na webu našel radu, že to může být špatně nastaveným časem na serveru - porovnal jsem to a ostrý server je cca 10 sekund pozadu.
Už jsem na jednom projektu přihlašování dělal (funguje pár let bez problémů) a vlastně jsem převzal ten kod a jen udělal novou konfiguraci (api klíče secret apod)
Už jsem docela zoufalý, nevím co s tím a v pondělí se to má spouštět.
Moc děkuji za radu
Porovnal bych výpisy phpinfo(), což jsi asi udělal a otestoval skript někde na serveru s PHP 7.x, případně rovnou upgradoval. To je tvůj server nebo webhosting? Těch 10 sekund zpoždění IMHO nehraje roli. Ještě mě napadlo, jestli není problém s nastavením práv?
Ahoj, je to hostované u jedné firmy co nám i dělá správu sítě, vpn apod... upgrade teď asi není možný - nesmí se stát výpadek a moc se mi do toho nechce šťourat - je to v plánu, ale až na to bude klid... Vím ale že verzí php to nebude - první projekt oc jsem dělala a funguje, tak taky běží na php 5.6
Zkusím ten čistý skript. A pak porovnám phpinfo(). Ale určitě to bude něco na serveru, když na localu to funguje... Skoro si myslím, jestli se nějak nepoškodí/špatně dekoduje token z url...
Tak jsem prošel phpinfo() a je +- stejné - sice chybí pár modulů, ale myslím že nemají vliv.
Dále jsem zkusil dát čistou testovací aplikaci na web a ta samá chyba, něco to bude na serveru.
Posílám přesný výpis chyby
A ten čas jsi teda srovnal?
nn, sice je o 10 sekund pozadu oproti localu, ale teď jsem zjistil, že je stejně jako na tom starším webu, kde to funguje
Přece jen zkus srovnat ten čas. Tady to prý pomohlo:
PHP Fatal error: Uncaught GuzzleHttp\Exception\ClientException : Client error: `POST https://www.googleapis.com/oauth2/v4/token` resulted in a `400 Bad Request`
No asi to způsobil provozovatel serveru - den předem jsem je žádal o zapnutí PHP EXIF. To zapnuli. Druhý den jsem zjistil ten problém s přihlašováním + se objevil problém s odesíláním emailů (což jsem zjistil až později, problém se ssl). Nakonec jsem napsal jsem na help desk a zda to vše nesouvisí s tou instalací PHP EXIF. Za cca 2 hodiny byla odpověď že určitě ne, jen že při té instalaci aktualizovali ještě nějaké moduly. A chvilku na to začalo vše fungovat...
No a dnes dokonce z help desku zmizel ten můj dotaz...
Takže prostě něco pokopali u poskytovatele a nepřiznali to... Snad to už bude fungovat bez problémů....