Open2b consente ai clienti del negozio di fare il login, ed eventualmente la registrazione, tramite il proprio account Facebook. Di seguito viene mostrato come aggiungere un pulsante nella pagina di login per abilitare questa funzione.
Le modifiche al codice sorgente dei templates richiedono una conoscenza più o meno approfondita di HTML, CSS e JavaScript.
È necessario aver già creato su Facebook un'app abilitata al login e all'uso dell'SDK JavaScript, e dotata dei permessi avanzati per l'accesso al profilo pubblico e all'indirizzo email. Il processo di verifica dell'app deve essere stato completato.
Potete consultare la documentazione di Facebook a riguardo.
{
"version": 8,
"methods": ["loginWith", "signUp"]
}
storefront.json
.
{##
La macro FacebookLogin mostra il pulsante "Accedi con Facebook" nel punto in cui viene chiamata.
Se il cliente non ha mai autorizzato il login con Facebook per il sito, verrà chiesta conferma,
in caso contrario il cliente verrà fatto accedere direttamente.
Se non esiste un cliente registrato al negozio con l'email fornita da Facebook, il cliente verrà
registrato, nome, cognome e email saranno presi da Facebook, saranno invece inseriti dei dati fittizi
per gli altri campi obbligatori per la registrazione.
##}
{% macro FacebookLogin(appID string, consents []int) %}
{% if ! isLoggedIn %}
{% serializedConsents, _ := marshalJSON(consents) %}
<div class="fb-login-button" data-width="" data-size="large" data-button-type="login_with" data-layout="default" data-auto-logout-link="false" data-use-continue-as="false"></div>
<script type="text/javascript">
window.fbAsyncInit = function() {
FB.init({
appId : {{ appID }},
cookie : true,
xfbml : true,
version: 'v13.0'
});
FB.getLoginStatus(function(response) {
statusChangeCallback(response);
});
};
function statusChangeCallback(response) {
var redirectURL = document.location.href.replace(/\/[^\/]*$/,'/');
if (response.status === 'connected') {
Open2b.Storefront.loginWith('Facebook',{ 'id': response.authResponse.userID , 'token': response.authResponse.accessToken}).then(function (response) {
document.location = redirectURL;
}).catch(function(error){
if ( error.message === '(credentials NotFound) There is no customer for these credentials' ) {
// Il cliente non è registrato, lo si può registrare usando l'API storefront, occorre dunque recuperare i suoi dati da Facebook.
FB.api('/me?fields=first_name,last_name,email', function(response) {
var customer = {
address: {
firstName: response.first_name,
lastName: response.last_name,
street1: "N.D.",
city: "N.D.",
postalCode: "56100",
stateProv: "PI",
country: "IT",
email: response.email,
},
privacyConsents: {{ serializedConsents }},
password: _generatePassword(10)
};
Open2b.Storefront.signUp(customer).then(function() {
document.location = redirectURL + 'user-data';
}).catch(function(){
alert("Non è stato possibile effettuare il login tramite Facebook, per cortesia usare il login standard.")
});
});
} else {
alert("Non è stato possibile effettuare il login tramite Facebook, per cortesia usare il login standard.")
}
});
}
}
function _generatePassword(length) {
var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!\\$%&/()=?^,.;:-<>#'|[]{}@_";
var password = "";
var array = new Uint32Array(1);
for ( var i = 0; i < length; i++ ) {
crypto.getRandomValues(array);
password += chars[array[0]%chars.length];
}
return password;
}
</script>
<div id="fb-root"></div>
<script async defer crossorigin="anonymous" src="https://connect.facebook.net/{{language.Code}}_{{language.Region}}/sdk.js"></script>
{% end if %}
{% end macro %}
login-with-facebook.html
, nella cartella /imports
.{% extends "layouts/standard.html" %}
e subito dopo inserire una nuova riga incollando il seguente codice
{% import "imports/login-with-facebook.html" %}
<p class="sign-up"><a href="sign-up.html" title="{{ translate(`Sign up`) }}">{{ translate("Sign up") }}</a></p>
e subito dopo incollare il seguente codice:
{{ FacebookLogin("386761733020509", []int{ 6, 7 }) }}
sostituendo 386761733020509
con l'ID della vostra app di Facebook e sostituendo 6, 7
con gli ID dei vostri trattamenti obbligatori per la registrazione, separati da una virgola.
.fb-login-button.fb_iframe_widget { display: block; margin-top: 1em; text-align: center; }