Я пытаюсь настроить приложение (iframe) Facebook для использования OAuth для аутентификации. Я использовал python-sdk из Facebook, но я еще не удовлетворен результатом.
Проблема заключается в том, что когда я перенаправляю пользователя, который никогда не обращался к моему приложению на страницу входа в систему, мой iframe запускает уродливую промежуточную страницу, например следующую:
Если пользователь нажимает ссылку "Перейти на Facebook.com", она затем перенаправляется на стандартную страницу "Запрос на разрешение".
Есть ли способ избежать первой страницы и привести пользователя прямо ко второму?
Эта проблема возникает при первом доступе для пользователей, которые еще не предоставили никаких прав на мое приложение.
Код входа основан на примере OAuth в SDK Python:
class LoginHandler(BaseHandler):
def get(self):
verification_code = self.request.get("code")
args = dict(client_id=FACEBOOK_APP_ID, redirect_uri=self.request.path_url)
if self.request.get("code"):
args["client_secret"] = FACEBOOK_APP_SECRET
args["code"] = self.request.get("code")
raw_response = urllib.urlopen(
"https://graph.facebook.com/oauth/access_token?" +
urllib.urlencode(args)).read()
logging.debug("access_token raw response " + raw_response)
response = cgi.parse_qs(raw_response)
access_token = response["access_token"][-1]
# Download the user profile and cache a local instance of the
# basic profile info
graph = facebook.GraphAPI(access_token)
profile = graph.get_object("me")
user = User.get_by_key_name(profile["id"])
if not user:
user = User(key_name=str(profile["id"]),
id=str(profile["id"]),
name=profile["name"],
firstname=profile["first_name"],
profile_url=profile["link"],
access_token=access_token)
user.put()
elif user.access_token != access_token:
# we already know this user, but we need to update
user.access_token = access_token
user.put()
set_cookie(self.response, "fb_user", str(profile["id"]),
expires=time.time() + 30 * 86400)
self.response.headers["P3P"] = 'CP="IDC CURa ADMa OUR IND PHY ONL COM STA"'
self.redirect("/")
else:
self.redirect(
"https://graph.facebook.com/oauth/authorize?" +
urllib.urlencode(args))