Robię aplikację, w której chcę, aby użytkownicy zalogowali się przez Facebooka. Mój kod wygląda następująco:
<!DOCTYPE html>
<html>
<head>
<title>Myapp</title>
<script type="text/javascript" src="http://www.parsecdn.com/js/parse-1.2.18.min.js"></script>
</head>
<body>
<script>
function fblogin(){
Parse.initialize("APP_ID", "JS_KEY");
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/all.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
window.fbAsyncInit = function() {
Parse.FacebookUtils.init({
appId : 'xxxxxxxx', // Facebook App ID
channelUrl : 'http://myapp.parseapp.com', // Channel File
cookie : true, // enable cookies to allow Parse to access the session
xfbml : true // parse XFBML
});
Parse.FacebookUtils.logIn('email,user_friends', {
success: function(user) {
if (!user.existed()) {
alert("User signed up and logged in through Facebook!");
currentUser.set("email",email);
currentUser.save(null,{
success: function(){ alert('mail saved');},
error: function(){ alert('mail saving failed');}
});
} else {
alert("User logged in through Facebook!");
}
},
error: function(user, error) {
alert("User cancelled the Facebook login or did not fully authorize.");
}
});
};
}
</script>
<h1>NEW</h1>
<input type="submit" value="Login with facebook" onclick="fblogin();"/>
</body>
</html>
Ale jaki jest ten kod, jest to, że tworzy użytkownika w przeglądarce danych mojej aplikacji Parse, ale pozostawia pola "Email" jako "niezdefiniowane". Próbowałem wyraźnie zapisać wiadomość e-mail w powyższym kodzie, ale bez powodzenia. Poważnie potrzebuję e-maila do komunikowania się z moimi użytkownikami i powinno być obecne w klasie "Użytkownik". Czy jest jakiś sposób na osiągnięcie tego?
2 odpowiedzi
Musisz dokonać dodatkowego połączenia z API Facebook. Coś wzdłuż tych linii:
Parse.FacebookUtils.logIn('email,user_friends', {
success: function(user) {
if (!user.existed()) {
alert("User signed up and logged in through Facebook!");
FB.api('/me?scope=email', function(me) {
user.set("email", me.email);
user.save();
});
} else {
alert("User logged in through Facebook!");
}
},
error: function(user, error) {
alert("User cancelled the Facebook login or did not fully authorize.");
}
});
Należy pamiętać, że możesz uzyskać e-mail użytkownika, jeśli użytkownik pozwala na to, co powinno być przypadkiem, ponieważ określasz go w uprawnieniach logowania.
Potrzebujesz dodatkowych uprawnień, aby uzyskać dostęp do wiadomości e-mail. Użyj "Scope = e-mail" w ciągu swojego połączenia.
Zobacz: https://stackoverflow.com/a/3611781/1397632