#python #facebook
#python #Facebook
Вопрос:
После входа в систему я хочу, чтобы отображался текст «Добро пожаловать, Никлас», но после входа в систему мне нужно перезагрузить страницу, и я не понял, как заставить страницу отображать текст из переменной сервера current_user
. Если я войду в систему и нажму перезагрузку, появится правильное приветственное сообщение. Можете ли вы помочь мне достичь того, чего я хочу? Почему нет простого рабочего примера для FB python javascript? Могу ли я реализовать facebook connect без javascript? Если да, должен ли я сам использовать и устанавливать cookie? Спасибо
{% load i18n %}
<!DOCTYPE html>
<html xmlns:fb="https://www.facebook.com/2008/fbml">
<head>
<title>
Test Facebook SDK
</title>
</head>
<body>
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '164355773607006', // App ID
channelURL : '//WWW.KOOLBUSINESS.COM/static/channel.html', // Channel File
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
oauth : true, // enable OAuth 2.0
xfbml : true // parse XFBML
});
};
// Load the SDK Asynchronously
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
</script>
<fb:login-button autologoutlink="true"></fb:login-button>
{% if current_user %}
<div id="user-ident">
<span>{% trans "Welcome," %} <b>{{ current_user.name|escape }}</b></span>
</div>
{% endif %}
</body>
</html>
Вот как я получаю переменную current_user
@property
def current_user(self):
if not hasattr(self, "_current_user"):
self._current_user = None
cookie = facebook.get_user_from_cookie(
self.request.cookies, facebookconf.FACEBOOK_APP_ID, facebookconf.FACEBOOK_APP_SECRET)
logging.debug("logging cookie" str(cookie))
if cookie:
# Store a local instance of the user data so we don't need
# a round-trip to Facebook on every request
user = FBUser.get_by_key_name(cookie["uid"])
logging.debug("user " str(user))
logging.debug("username " str(user.name))
if not user:
graph = facebook.GraphAPI(cookie["access_token"])
profile = graph.get_object("me")
user = FBUser(key_name=str(profile["id"]),
id=str(profile["id"]),
name=profile["name"],
profile_url=profile["link"],
access_token=cookie["access_token"])
user.put()
elif user.access_token != cookie["access_token"]:
user.access_token = cookie["access_token"]
user.put()
self._current_user = user
return self._current_user
Ответ №1:
При использовании Oauth 2.0
FB.Init(...oauth=true)
кнопка входа в систему устанавливает файл cookie в ваш домен с именем
fbsr_(appid)=....
который кодируется с использованием секретного ключа приложения и который больше не содержит токен пользователя.
Если вы действительно хотите избежать использования клиентской части Java script (что является наиболее простым способом), вы можете использовать наличие этого файла cookie, чтобы узнать, подключен ли пользователь к facebook, а затем выполнить любую проверку авторизации или динамически отобразить приветственное сообщение.
Я не использую python, поэтому у меня нет рабочего примера, но это дает вам возможность поиска.
Надеюсь, это поможет.