Indice del forum www.zeroshell.net
Distribuzione Linux ZeroShell
 
 FAQFAQ   CercaCerca  GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo  Log inLog in   Messaggi privatiMessaggi privati 

Social Login - Facebook Twitter

 
Nuovo argomento   Rispondi    Indice del forum -> Suggerimento nuove funzionalità
Precedente :: Successivo  
Autore Messaggio
ghitax



Registrato: 24/07/13 10:05
Messaggi: 9

MessaggioInviato: Mer Lug 24, 2013 10:15 am    Oggetto: Social Login - Facebook Twitter Rispondi citando

ormai molte soluzioni commerciali di Hotspot consentono il login tramite il classico pulsante Login with Facebook
Zerotruth sarebbe un sistema veramente completo se dopo l'accesso tramite SMS gestisse pure l'accesso tramite Social Network.
Top
Profilo Invia messaggio privato
truthahn



Registrato: 12/06/12 11:46
Messaggi: 2225

MessaggioInviato: Mer Lug 24, 2013 2:50 pm    Oggetto: Rispondi citando

Ciao, non so bene come funziona ma aprire il firewall verso facebook, o altro, proprio non mi piace per nulla. Ho già fatto uno strappo alla regola con paypal e anche questo non mi garba. Naturalmente se qualche esperto ci illumina meglio e non ci sono controindicazioni e/o buchi creati perchè no?
Grazie del suggerimento.
Top
Profilo Invia messaggio privato
ghitax



Registrato: 24/07/13 10:05
Messaggi: 9

MessaggioInviato: Mer Ago 07, 2013 2:35 pm    Oggetto: Rispondi citando

truthahn ha scritto:
Ciao, non so bene come funziona ma aprire il firewall verso facebook, o altro, proprio non mi piace per nulla. Ho già fatto uno strappo alla regola con paypal e anche questo non mi garba. Naturalmente se qualche esperto ci illumina meglio e non ci sono controindicazioni e/o buchi creati perchè no?
Grazie del suggerimento.


L'idea è quella di aggiungere un pulsante "login with facebook" come in questo caso di prova:
http://utenti.casbanet.it/face/face01.php

Ho messo mano all'implementazione di questo servizio, tuttavia ho alcuni problemi con il file register.sh.
In PHP riesco a districarmi, ma sono un po spaesato con gli script.

ho creato l'applicazione in facebook developer (https://developers.facebook.com)
ho scelto la voce "Website with Facebook Login"
poi ho modificato il codice in zeroshell della pagina di login
aggiungendo il codice di javascript per l'inizializzazione di facebook:


Codice:

<script>
(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/it_IT/all.js#xfbml=1&appId=3xxxx8680008752";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>


<script>
  window.fbAsyncInit = function() {
  FB.init({
    appId      : '33xxxxxx0008752', // App ID
    channelUrl : 'http://www.xxxxxt.it', // Channel File
    status     : true, // check login status
    cookie     : true, // enable cookies to allow the server to access the session
    xfbml      : true  // parse XFBML
  });

  // Here we subscribe to the auth.authResponseChange JavaScript event. This event is fired
  // for any authentication related change, such as login, logout or session refresh. This means that
  // whenever someone who was previously logged out tries to log in again, the correct case below
  // will be handled.
  FB.Event.subscribe('auth.authResponseChange', function(response) {
    // Here we specify what we do with the response anytime this event occurs.
    if (response.status === 'connected') {
      // The response object is returned with a status field that lets the app know the current
      // login status of the person. In this case, we're handling the situation where they
      // have logged in to the app.
//ATTENZIONE ALLA FUNZIONE TESTAPI CHE MODIFICHEREMO DOPO
      testAPI();
    } else if (response.status === 'not_authorized') {
      // In this case, the person is logged into Facebook, but not into the app, so we call
      // FB.login() to prompt them to do so.
      // In real-life usage, you wouldn't want to immediately prompt someone to login
      // like this, for two reasons:
      // (1) JavaScript created popup windows are blocked by most browsers unless they
      // result from direct interaction from people using the app (such as a mouse click)
      // (2) it is a bad experience to be continually prompted to login upon page load.
      FB.login();
    } else {
      // In this case, the person is not logged into Facebook, so we call the login()
      // function to prompt them to do so. Note that at this stage there is no indication
      // of whether they are logged into the app. If they aren't then they'll see the Login
      // dialog right after they log in to Facebook.
      // The same caveats as above apply to the FB.login() call here.
      FB.login();
    }
  });
  };

  // Load the SDK asynchronously
  (function(d){
   var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
   if (d.getElementById(id)) {return;}
   js = d.createElement('script'); js.id = id; js.async = true;
   js.src = "//connect.facebook.net/en_US/all.js";
   ref.parentNode.insertBefore(js, ref);
  }(document));

  // Here we run a very simple test of the Graph API after login is successful.
  // This testAPI() function is only called in those cases.
  function testAPI() {
    //console.log('Welcome!  Fetching your information.... ');

    FB.api('/me', function(response) {
      console.log('Good to see you, ' + response.name + '.');
     
    });
  }
</script>


ho inserito il pulsante di login di facebook dentro il corpo della pagina.

Codice:

<h3> accedi tramite facebook</h3>
<div class="fb-login-button" data-show-faces="true" data-width="200" data-max-rows="1"></div>


Adesso ho cercato di integrare la registrazione con il pulsante di login in questo modo:

ho inserito il form "register" di zerotruth con tutti i campi type="hidden"

Codice:

<form name="register">
<input id="USER" type="hidden" name="USER" value="">
<input id="NAME" type="hidden" name="NAME" value="">
<input id="LAST_NAME" type="hidden" name="LAST_NAME" value="">
<input id="EMAIL" type="hidden" name="EMAIL" value="">
<input id="PHONE" type="hidden" name="PHONE" value="">
<input id="PASSWORD" type="hidden" name="PASSWORD" value="">
<input type="hidden" name="CONTROL" value="OK">
</form>


ho modificato la funzione "testAPI()" di facebook inserendo a login avvenuto le voci per registrare l'utente su zeroshell.

Codice:

function testAPI() {

    FB.api('/me', function(response) {
      console.log('Good to see you, ' + response.name + '.');
oFormObject = document.forms['register'];
oFormObject.elements["USER"].value = response.email;
oFormObject.elements["PASSWORD"].value = response.id;
oFormObject.elements["NAME"].value = response.first_name;
oFormObject.elements["LAST_NAME"].value = response.last_name;
oFormObject.elements["EMAIL"].value = response.email;
oFormObject.elements["PHONE"].value = '1234567890';
//alert ('dopo inserimento!');
Control();
//alert(response.name + ' - ' + response.birthday + ' - ' + response.email + ' - ' + response.first_name + ' - ' + response.last_name);
     
    });


in pratica sostituisco i valori nei campi del form "register" con i valori che mi restituisce facebook.

poi richiamo la funzione di register.sh "Control();" che ho inserito a seguire gli script di facebook nella sezione <head>


Codice:

function Control(){
      var USER = document.getElementById("USER").value.replace(/\s/g,'');
      var NAME = document.getElementById("NAME").value;
      var LAST_NAME = document.getElementById("LAST_NAME").value;
      var EMAIL = document.getElementById("EMAIL").value;
      var PHONE = document.getElementById("PHONE").value;
      //var str1 = removeSpaces(document.getElementById('txtCaptcha').value);
      //var str2 = removeSpaces(document.getElementById('txtInput').value);
      var controlemail = /^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
      if ((NAME == "") || (NAME == "undefined")) {
         alert("Nome: Mancano dei dati");
         document.register.NAME.focus();
         return false;
      }
      else if ((LAST_NAME == "") || (LAST_NAME == "undefined")) {
         alert("Cognome: Mancano dei dati");
         document.register.LAST_NAME.focus();
         return false;
      }
      else if ((EMAIL == "") || (EMAIL == "undefined")) {
         alert("Email non valida: " + document.register.EMAIL.value);
         document.register.EMAIL.focus();
         return false;
      }
      else
      {
         
         alert ("Azione riuscita, cliente autenticato!");
         document.register.action = "register.sh";
         document.register.method = "POST";
         document.register.submit();
      }
   }


perché non mi salva il nuovo utente?
cosa dimentico?
la voce alert ("Azione riuscita, cliente autenticato!")
mi conferma che arrivo al punto di inviare i campi al file registra.sh
tuttavia l'utente non viene registrato.
Top
Profilo Invia messaggio privato
truthahn



Registrato: 12/06/12 11:46
Messaggi: 2225

MessaggioInviato: Mer Ago 07, 2013 3:44 pm    Oggetto: Rispondi citando

Ciao, non sei ancora autenticato e quindi facebook non è raggiungibile.
Top
Profilo Invia messaggio privato
ghitax



Registrato: 24/07/13 10:05
Messaggi: 9

MessaggioInviato: Mer Ago 07, 2013 3:56 pm    Oggetto: Rispondi citando

truthahn ha scritto:
Ciao, non sei ancora autenticato e quindi facebook non è raggiungibile.


scusami, forse mi sono espresso male.
su facebook vengo autenticato
e mi da in risposta tutti i dati che mi servono dell'utente,
vedi la sezione:


Codice:

oFormObject.elements["USER"].value = response.email;
oFormObject.elements["PASSWORD"].value = response.id;
oFormObject.elements["NAME"].value = response.first_name;


dove response.mail, response.id etc...
effettivamente mi sono restituiti
(ho controllato mediante alert(response.email) etc...

il dramma si consuma nel momento in cui devo scrivere dentro il db di zeroshell
certamente dovuto alla mia scarsa conoscenza degli script .sh
e del database di zeroshell

in particolare il problema è in questa sezione:

Codice:

alert ("Azione riuscita, cliente autenticato!");
         document.register.action = "register.sh";
         document.register.method = "POST";
         document.register.submit();


qui richiama il form di register.sh che io ho riportato in questo modo:


Codice:

<form name="register">
<input id="USER" type="hidden" name="USER" value="">
<input id="NAME" type="hidden" name="NAME" value="">
<input id="LAST_NAME" type="hidden" name="LAST_NAME" value="">
<input id="EMAIL" type="hidden" name="EMAIL" value="">
<input id="PHONE" type="hidden" name="PHONE" value="">
<input id="PASSWORD" type="hidden" name="PASSWORD" value="">
<input type="hidden" name="CONTROL" value="OK">
</form>


adesso sto facendo un altra prova, inserendo questo form
che viene prodotto da register.sh nella procedura di autoregistrazione:
Codice:

<form method="POST" action="register.sh">
      <input name="ACCEPT" type="hidden" value="OK"><p>
      <input type="hidden" name="USER" value="tizio">
      <input type="hidden" name="NAME" value="tiziano">
      <input type="hidden" name="LAST_NAME" value="Rossi">
      <input type="hidden" name="EMAIL" value="xxx@gmail.com">
      <input type="hidden" name="PHONE" value="39xxxx47128">
      <input type="hidden" name="CONTROL_ACCEPT" value="OK">
      <input type="hidden" name="CONTROL_NEW" value="">
      <input type="hidden" name="PASSWORD" value="">
</form>


per poi inviarlo sempre con document.register.submit();

il problema è che non so come zeroshell scrive dentro il database
e non lo capisco dagli script del file register.sh
io di solito lavoro con mysql e utilizzo le classiche query INSERT INTO etc...
Top
Profilo Invia messaggio privato
truthahn



Registrato: 12/06/12 11:46
Messaggi: 2225

MessaggioInviato: Mer Ago 07, 2013 5:05 pm    Oggetto: Rispondi citando

Non so da che parte provi lo script ma un utente, che è collegato all'interfaccia del CP, non può arrivare a facebook a meno che non apri il firewall (almeno spero), quindi vedrebbe solo "accedi tramite facebook" ma senza il bottone di login che viene recuperato da FB. Quindi o hai il firewall aperto, e allora non serve il CP, oppure hai fatto partire lo script dall'interfaccia di amministrazione... oppure sbaglio io Rolling Eyes
Top
Profilo Invia messaggio privato
ghitax



Registrato: 24/07/13 10:05
Messaggi: 9

MessaggioInviato: Mer Ago 07, 2013 5:28 pm    Oggetto: Rispondi citando

truthahn ha scritto:
Non so da che parte provi lo script ma un utente, che è collegato all'interfaccia del CP, non può arrivare a facebook a meno che non apri il firewall (almeno spero), quindi vedrebbe solo "accedi tramite facebook" ma senza il bottone di login che viene recuperato da FB. Quindi o hai il firewall aperto, e allora non serve il CP, oppure hai fatto partire lo script dall'interfaccia di amministrazione... oppure sbaglio io Rolling Eyes



Lo script lo provo nella pagina di login aprendo il template di zeroshell...

ma il problema non è quello, posto che per qualche oscura ragione riesco a visualizzare il button Very Happy , vedremo dopo di capire per quale alchimia, il problema è

premesso che riesco a riempire i campi del form

Codice:

<form method="POST" action="register.sh">
      <input name="ACCEPT" type="hidden" value="on"><p>
      <input type="hidden" name="USER" value="aldo">
      <input type="hidden" name="NAME" value="aldo">
      <input type="hidden" name="LAST_NAME" value="bretella">
      <input type="hidden" name="EMAIL" value="xxxxnto@gmail.com">
      <input type="hidden" name="PHONE" value="39xxxxx47128">
      <input type="hidden" name="CONTROL_ACCEPT" value="OK">
      <input type="hidden" name="CONTROL_NEW" value="">
      <input type="hidden" name="PASSWORD" value="abracadabra">
      <input type="submit" name="INTERFACE" class="bottone" value="Continua">
</form>


utilizzando la risposta di facebook, (response.LAST_NAME etc...)

come faccio a mandare il form così compilato dentro il database e registrare l'user facendo finta di trovarmi dentro il file register.sh?
tu in register.sh utilizzi tre fasi per registrare l'user, quando chiedi di accettare le condizioni e confermare non riesco più a seguire il contenuto della registrazione.
C'è un modo per mandare il contenuto del form con i campi già compilati (come sopra) dentro il database?
magari con un register.sh modificato, rinominato registerFACE.sh?

scusami, per l'insistenza...
sono bloccato su questa cosa, se supero questa fase ti mando tutto il codice.
anche usando il pulsante submit comunque si ostina a non voler inviare i dati su register.sh
Top
Profilo Invia messaggio privato
truthahn



Registrato: 12/06/12 11:46
Messaggi: 2225

MessaggioInviato: Mer Ago 07, 2013 5:53 pm    Oggetto: Rispondi citando

non puoi testare il tuo script nel "Web Login Template Manager" di ZS, quello serve solo per "vederlo" (se ho capito quello che stai provando). E quindi da li vedi il bottone perchè non sei sul CP. Se vuoi fare delle prove reali devi metterlo in linea.
Top
Profilo Invia messaggio privato
ghitax



Registrato: 24/07/13 10:05
Messaggi: 9

MessaggioInviato: Mer Ago 07, 2013 6:13 pm    Oggetto: Rispondi citando

truthahn ha scritto:
non puoi testare il tuo script nel "Web Login Template Manager" di ZS, quello serve solo per "vederlo" (se ho capito quello che stai provando). E quindi da li vedi il bottone perchè non sei sul CP. Se vuoi fare delle prove reali devi metterlo in linea.


nel template vado ad incollare il codice modificato come visto sopra, è chiaro che non faccio le prove con il template....

comunque ho fatto un passo in avanti, riesco ad inviare le informazioni al register.sh

in sostanza ho cambiato questo:
Codice:

         alert ("Azione riuscita, cliente autenticato!");
         var ip = "<ZS_TAG /system/cp/Auth/Custom/IP>";
         document.register.action = "http://"+ip+":8089/cgi-bin/register.sh";
         document.register.method = "POST";
         document.register.submit();


nella funzione Control()
dovevo mettere tutto il percorso
"http://"+ip+":8089/cgi-bin/register.sh";

ora la pagina, con i dati di facebook va a finire nella pagina dove mi chiede di accettare le condizioni, a quel punto spunto la casella e premo conferma,
l'utente con i dati di facebook viene registrato e lo ritrovo nella lista utenti
a questo punto ho due problemi:

1) Mi torna nella pagina originaria di register.sh, con i campi del form vuoti da riempire, invece dovrebbe aprire il pop up e farmi navigare
2) se rifaccio il login con facebook (dunque lo stesso utente già registrato) mi compare la scritta "email già registrata" e mi rimanda nel form da compilare con i dati inseriti di facebook ma con il campo email vuoto.
Invece una volta appurato che l'email c'è già o l'user c'è già dovrebbe avviare il popup e la connessione...
Top
Profilo Invia messaggio privato
ghitax



Registrato: 24/07/13 10:05
Messaggi: 9

MessaggioInviato: Mer Ago 07, 2013 6:38 pm    Oggetto: Rispondi citando

truthahn ha scritto:
non può arrivare a facebook a meno che non apri il firewall (almeno spero), quindi vedrebbe solo "accedi tramite facebook" ma senza il bottone di login che viene recuperato da FB. Rolling Eyes


avevi ragione tu
ho fatto le prove finora in rete locale senza access point, collegandomi all'indirizzo locale, e andava tutto bene.

ho acceso l'access point, ho collegato un pc in wi-fi e non mi fa vedere il pulsante di facebook Crying or Very sad
Top
Profilo Invia messaggio privato
truthahn



Registrato: 12/06/12 11:46
Messaggi: 2225

MessaggioInviato: Mer Ago 07, 2013 7:28 pm    Oggetto: Rispondi citando

Meno male! vuol dire che il CP funziona,
Ora il problema è questo: FB non ha un unico IP ma decine e alcuni pure dinamici. Quindi non puoi aprire il firewall verso FB ma "aprirlo" proprio. La scelta che ho fatto per paypal è stato di aprire il firewall per tot minuti, il tempo della registrazione e poi chiuderlo. Se un utente fa il furbetto dopo un tot di volte viene bannato. Non ho trovato strade migliori. L'altra strada è quella di far fare le operazioni ad un server esterno, con un ip pubblico, e appoggiare ZS a quello per l'operazione. Naturalmente non tutti hanno a disposizione un server esterno e quindi non ho seguito quella strada. L'altra difficoltà è poi il ritorno delle informazioni da FB che, come paypal, risponde ad un indirizzo ben preciso. Quindi devi lavorare quasi sicuramente sul tuo router, del quale devi conoscere il suo ip pubblico, che ridiriga il traffico a una ben determinata pagina. Se dai un occhio alla guida ZT_paypal sul sito di zerotruth viene illustrato come ho fatto io.
Buon lavoro Wink
Top
Profilo Invia messaggio privato
ghitax



Registrato: 24/07/13 10:05
Messaggi: 9

MessaggioInviato: Lun Ago 12, 2013 10:48 am    Oggetto: Rispondi citando

truthahn ha scritto:
L'altra strada è quella di far fare le operazioni ad un server esterno, con un ip pubblico, e appoggiare ZS a quello per l'operazione. Naturalmente non tutti hanno a disposizione un server esterno e quindi non ho seguito quella strada.


Avendo un server esterno con IP pubblico, comunque nella pagina che risiede nel server esterno, il pulsante di login facebook non richiama sempre un link esterno?
se io nella sezione Free Authorized di ZS aggiungo l'IP del server remoto,
riesco a visualizzare la pagina nel server, ma quando si collega all'IP di Facebook per visualizzare il pulsante, lo blocca pure.

C'è un modo per superare questo problema?
Top
Profilo Invia messaggio privato
cufre



Registrato: 26/02/10 17:14
Messaggi: 141

MessaggioInviato: Mar Ott 08, 2013 2:35 pm    Oggetto: rieccomi ;-) Rispondi citando

Ciao Truth ! e Ciao ghitax (complimenti per quello che stavi facendo !!), se posso provare ad "insistere" questa feature è davvero ottima ed è un peccato abbandanarla ad un passo dal traguardo.
Certamente andrebbe anche bene gestire o "centralizzare" le autenticazioni Social su una macchina remota installata altrove ed aprire il firewall solo verso quella... Solo ci sarebbe bisogno delle indicazioni di Truth per capire se fattibile e come.
Comunque ai fini "pubblicitari" per un'eventuale struttura ricettiva che vuole fornire la connessione gratuitamente con un semplice "like" potrebbe essere davvero interessante. (in molti lo stanno facendo http://www.wiman.me/it/ )
Se non ho capito male inoltre quest'opzione potrebbe sollevare completamente la struttura dal conservare i "log" delle connessioni non più obbligatori ma fortemente consigliati.. ?
Scusatemi se non mi sono spiegato o se ho scritto delle .... ^__^
Comunque Ottimo lavoro, come sempre !
Top
Profilo Invia messaggio privato Invia e-mail
alebot



Registrato: 21/03/09 17:45
Messaggi: 33

MessaggioInviato: Lun Apr 07, 2014 8:28 pm    Oggetto: Re: rieccomi ;-) Rispondi citando

Ci sono novità poi per un neventuale registrazione/login all'hotspot ZS con facebook?
Top
Profilo Invia messaggio privato
truthahn



Registrato: 12/06/12 11:46
Messaggi: 2225

MessaggioInviato: Mar Apr 08, 2014 2:42 pm    Oggetto: Rispondi citando

Salve,
si, da un bel po' di tempo, zerotruth ha la possibilità di autoregistrarsi con facebook, google+ e twitter.

Buon pomeriggio.
Top
Profilo Invia messaggio privato
cicciolo



Registrato: 20/06/14 09:13
Messaggi: 4

MessaggioInviato: Gio Set 25, 2014 12:06 pm    Oggetto: Rispondi citando

Buongiorno, c'è anche la possibilitá di mettere un mi piace obbligatorio?
Top
Profilo Invia messaggio privato
truthahn



Registrato: 12/06/12 11:46
Messaggi: 2225

MessaggioInviato: Gio Set 25, 2014 7:24 pm    Oggetto: Rispondi citando

Salve,
no non ancora... vedremo in futuro... naturalmente se qualcuno lo integra felice di inserirlo in aggiornamento per tutti.

Buona serata.
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Suggerimento nuove funzionalità Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi


Powered by phpBB © 2001, 2005 phpBB Group
phpbb.it