PHP kodu Facebook OAuth akışında dönüşünde sorgu dizesi param göremiyorum

3 Cevap php

Ben Facebook Open Graph kendi OAuth akışını kullanarak ve onlar da geri sorgu dizesi parametrelerini ayrıştırma ile ilgili sorunlarınız ile bazı entegrasyon yapıyorum.

Benim geri URL, onlar bir karma (#) ile bir "access_token" parametresini geri pas. bu yüzden arama olacaktır:

http://mydomain.com/callback.php#access_token=foobar123

foobar123 benim erişim belirteci nerede olduğunu ayrıştırmak çalışıyorum.

(Hatta her şeyi geçmesi () phpinfo kullanarak) biliyorsanız ve ben her hata ayıklama hile yaptık Ancak, ne olursa olsun ben ne, benim PHP kodu göremiyorum. URL sadece http://mydomain.com/callback.php olarak belirtilmiştir. URL kalanı gerçekten yok sanki!

Bu kod hiçbir şey döndürür:

$token = $_REQUEST['access_token'];

Herhangi bir yardım büyük Açıkçası basit bir şey eksik ... duyacağız.

3 Cevap

The url fragment (the part after #) is never passed to the server and so the PHP script would never see it. The way you can handle it is using javascript on callback page which would take the url's hash part and post it to another page as query string parameter.

callback1.php

<script type="text/javascript">
   var h = window.location.hash;
   window.location = 'http://example.com/callback2.php?'+h;
</script>

callback2.php

<?php
    $access = $_GET['access_token'];
?>

Ben öneririm rağmen yapmanız için çalışıyoruz ne için Facebook Javascript ve PHP SDK bakabilirsiniz. Tüm temel OAuth işlevi zaten orada inşa edilmiştir.

Sunucuya bir sorgu dizesi olarak geçirilen belirteci olması, sadece facebook uygulama ayarları gidin ve "Auth Dialog" sekmesinde "Doğrulanmış Puanı" bölümüne bakın.

# Karakteri sonra her şey sadece istemci tarafında mevcuttur. Bu değere erişmek ve çerez saklamak veya farklı bir URL'ye kullanıcıyı yönlendirmek için javascript kullanmak deneyebilirsiniz. Bazı mock-up:

<script type="text/javascript">
var token = 'foo'; // In real, get value by parsing URL
window.location ('http://mydomain.com/callback.php?token=' + token);
</script>