Changeset 52233 in spip-zone


Ignore:
Timestamp:
Oct 1, 2011, 2:47:49 PM (8 years ago)
Author:
rastapopoulos@…
Message:

Ça marche preque : l'auteur est bien connecté lorsqu'on ne donne que son login SAUF que ça reste bloqué sur l'action "action/auth.php" et que ça veut pas rediriger vers la page d'où l'on venait alors que dans l'URL il y a bien un "redirect=.....". Normalement les actions sont censées rediriger toutes seules non ?

Location:
_plugins_/fblogin/dev
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/fblogin/dev/auth/fblogin.php

    r44690 r52233  
    11<?php
    2 /**
    3  * Plugin OpenID
    4  * Licence GPL (c) 2007-2009 Edouard Lafargue, Mathieu Marcillaud, Cedric Morin, Fil
    5  *
    6  */
    72 
    8 if (!defined("_ECRIRE_INC_VERSION")) return;
     3if (!defined('_ECRIRE_INC_VERSION')) return;
    94
    105/**
    11  * Authentifie via fblgoin
     6 * Authentifie via Facebook
    127 * @param string $login
    138 * @param string $pass
     
    1510 * @return <type>
    1611 */
    17  
    1812function auth_fblogin_dist ($login, $pass, $serveur='') {
    19 
    20 // il faut vérifier que l'on détecte une session FB, on commence par inclure la bibliothèque FB
    21         include_spip('inc/facebook');
    22         include_spip('inc/fblogin');
     13        // il faut un login non vide ET un pass vide (sinon cela ne concerne pas Facebook)
     14        if (!strlen($login) OR strlen($pass)) return false;
     15        $auteur = false;
    2316       
    24         fblogin_log("Je suis passé par ici", 2);
     17        // On cherche si ce login ou email est lié a un UID Facebook
     18        $auteur = sql_fetsel(
     19                'fb_uid, statut',
     20                'spip_auteurs',
     21                array(
     22                        'statut != '.sql_quote('5poubelle'),
     23                        'login = '.sql_quote($login).' or email = '.sql_quote($login),
     24                        'fb_uid > 0'
     25                ),
     26                '', '', '', '', $serveur
     27        );
    2528       
    26         // Création de l'objet Facebook
    27         $facebook = new Facebook(array(
    28           'appId'  => '_FB_APP_ID',
    29           'secret' => '_FB_SECRET_ID',
    30           'cookie' => true,
    31         ));
    32        
    33         $session = $facebook->getSession();
    34        
    35         // On ne trouve pas de cookie, on renvoie vers FB
    36         if (!$session) {
    37                 header('Location:'.$facebook->getLoginUrl(array('req_perms'=>'email','locale'=>'fr_FR')));
    38                 return false;
    39         }
    40         // On a trouvé un cookie, on a donc les infos sur l'auteur. Je les stocke dans $fbme
    41         else {
    42                 try {
    43                         $_SESSION['fb_session'] = $session;
    44                         $uid = $facebook->getUser();
    45                         $fbme = $facebook->api('/me');
    46                 }
    47                 catch (FacebookApiException $erreurs_fblogin){return $erreurs_fblogin;};
     29        // Si jamais connecté, il faut se connecter une première fois avec le vrai mot de passe
     30        if ($auteur['statut'] == 'nouveau'){
     31                return _T('fblogin:form_login_statut_nouveau');
    4832        }
    4933       
    50         $password = sha1(uniqid());
     34        include_spip('inc/fblogin');
     35        $retour = auth_url_retour_login('fblogin', $login, url_absolue(self()));
     36        $erreur = fblogin_demander_authentification($retour);
    5137       
    52         // On va vérifier que l'uid est bien présent dans la table auteurs
    53         if (!sql_countsel("spip_auteurs","fb_uid=$uid")) {
    54                 //Il n'y a pas d'uid. On verifie si l'auteur avait déjà un compte SPIP en s'appuyant sur son e-mail
    55                         if (!sql_countsel("spip_auteurs","email =".sql_quote($fbme['email']))) {
    56                                 // SPIP n'a pas trouvé de correspondance entre l'email FB et les e-mails de la table auteurs
    57                                 // On crée donc un nouvel auteur pour ne pas dépendre de FB
    58                                 $id_auteur = sql_insertq('spip_auteurs',
    59                                         array('nom'=> $fbme['name'],
    60                                                   'email' => $fbme['email'],
    61                                                   'login' => $fbme['email'],
    62                                                   'pass' => $password,
    63                                                   'statut' => "1comite",
    64                                                   'source' => "fblogin",
    65                                                   'fb_uid' => $uid));
    66                                 $auteur=sql_fetsel("*", "spip_auteurs", "id_auteur=".sql_quote($id_auteur),'','','','',$serveur);
    67                                 }
    68                                 // SPIP a trouvé un e-mail correspondant, on va juste ajouter l'uid à l'auteur existant
    69                         else {
    70                                 $auteur = sql_updateq("spip_auteurs",array('source'=>"fblogin",'fb_uid' => $uid),"email =".sql_quote($fbme['email']));
    71                                 $auteur=sql_fetsel("*", "spip_auteurs", "fb_uid=".sql_quote($uid),'','','','',$serveur);
    72                                 }
    73                 }
    74         else {
    75                 // l'uid Facebook de l'auteur existe, il faut juste retrouver ses informations pour le logguer
    76                 $auteur = sql_fetsel("*", "spip_auteurs", "fb_uid=" . sql_quote($uid) . " AND source='fblogin'",'','','','',$serveur);
    77         }
    78        
    79         $login = $auteur['login'];
    80         return $auteur;
     38        // Si on arrive là c'est qu'il y a une erreur
     39        return $erreur;
    8140}
    8241 
    8342function auth_fblogin_terminer_identifier_login($login, $serveur=''){
    84         // Création de l'objet Facebook
    85         $facebook = new Facebook(array(
    86           'appId'  => '_FB_APP_ID',
    87           'secret' => '_FB_SECRET_ID',
    88           'cookie' => true,
    89         ));
     43        include_spip('inc/fblogin');
     44        $auteur = fblogin_terminer_authentification();
    9045       
    91         $session = $facebook->getSession();
    92 
    93         $_SESSION['fb_session'] = $session;
    94         $uid = $facebook->getUser();
    95         $fbme = $facebook->api('/me');
     46        if (is_string($auteur)){
     47                return $auteur;
     48        }
    9649       
    97         $auteur = sql_fetsel("*", "spip_auteurs", "fb_uid=" . sql_quote($uid) . " AND source='fblogin'",'','','','',$serveur);
    98 
    99         return $auteur;
    100 }
    101 
    102 function auth_fblogin_retrouver_login($login, $serveur='') {
    103         // Création de l'objet Facebook
    104         $facebook = new Facebook(array(
    105           'appId'  => '_FB_APP_ID',
    106           'secret' => '_FB_SECRET_ID',
    107           'cookie' => true,
    108         ));
    109        
    110         $session = $facebook->getSession();
    111 
    112         $_SESSION['fb_session'] = $session;
    113         $uid = $facebook->getUser();
    114         $fbme = $facebook->api('/me');
    115 
    116        
    117         if($auteur = sql_fetsel("*", "spip_auteurs", "fb_uid=".sql_quote($uid),'','','','',$serveur)) {
     50        if (is_array($auteur)
     51                and isset($auteur['fb_uid'])
     52                and $fb_uid = $auteur['fb_uid']
     53                and $auteur = sql_fetsel(
     54                        '*',
     55                        'spip_auteurs',
     56                        array(
     57                                'login = '.sql_quote($login).' or email = '.sql_quote($login),
     58                                'fb_uid = '.sql_quote($fb_uid)
     59                        ),
     60                        '', '', '', '', $serveur
     61                )
     62        ){
     63                $auteur['auth'] = 'fblogin';
    11864                return $auteur;
    11965        }
     
    12268}
    12369
    124 function auth_fblogin_formulaire_login($flux){
     70// Même sans login on regarde si on trouve un auteur connecté à FB
     71function auth_fblogin_retrouver_login($login, $serveur='') {
    12572        include_spip('inc/fblogin');
    126         $flux['data'] = fblogin_login_form($flux['data'],$flux['args']['contexte']);
    127         return $flux;
     73        $auteur = fblogin_terminer_authentification();
     74       
     75        if (is_array($auteur)
     76                and isset($auteur['fb_uid'])
     77                and $fb_uid = $auteur['fb_uid']
     78                and $auteur = sql_fetsel(
     79                        '*',
     80                        'spip_auteurs',
     81                        array(
     82                                'fb_uid = '.sql_quote($fb_uid)
     83                        ),
     84                        '', '', '', '', $serveur
     85                )
     86        ){
     87                return $auteur;
     88        }
     89       
     90        return false;
    12891}
    12992
    130 
    13193?>
  • _plugins_/fblogin/dev/inc/fblogin.php

    r52098 r52233  
    112112/**
    113113 * Finir l'authentification apres le retour depuis le serveur Facebook
    114  * analyse le retour de la requete openID
    115  * utilise l'URL de retour pour vérifier la demande
    116114 * renvoie une chaîne d'erreur en cas d'erreur
    117115 * un tableau decrivant l'utilisateur en cas de succès
  • _plugins_/fblogin/dev/lang/fblogin_fr.php

    r52098 r52233  
    2828        'form_pet_votre_fblogin' => 'Votre adresse fblogin',
    2929        'form_login_fblogin_inconnu' => 'Cette adresse fblogin est inconnue. Corrigez, ou enregistrez-la dans votre profil.',
    30         'form_login_statut_nouveau' => 'Pour votre premi&egrave;re connexion, vous devez utiliser le mot de passe qui vous a &eacute;t&eacute; envoy&eacute; par mail',
     30        'form_login_statut_nouveau' => 'Pour votre première connexion, vous devez utiliser le mot de passe qui vous a été envoyé par courriel.',
    3131       
    3232        // O
  • _plugins_/fblogin/dev/plugin.xml

    r52098 r52233  
    11<plugin>
    2         <nom> <!-- Nom du plugin -->
    3          <multi>
    4                  [fr]Authentification Facebook Connect
    5                  [en]Facebook Connect Authentication
    6          </multi>
     2        <nom>
     3                <multi>
     4                 [fr]Identification Facebook
     5                 [en]Facebook identification
     6                </multi>
    77        </nom>
    8         <auteur>[Edouard Lafargue->mailto:edouard@lafargue.name], Mathieu Marcillaud, Cedric Morin [->yterium.net], Fil</auteur>
    9         <licence>
     8        <slogan>
    109                <multi>
    11                 [fr]_ &#169; 2007-2009 - Distribu&eacute; sous licence GNU/GPL
    12                 [en]_ &#169; 2007-2009 - Distributed under GNU/GPL License
     10                 [fr]Inscription et authentification avec Facebook Connect
     11                 [en]Facebook Connect sign-in and authentication
    1312                </multi>
    14         </licence>
     13        </slogan>
     14        <auteur>[Les Développements Durables->http://www.ldd.fr]</auteur>
     15        <licence>GPL v3</licence>
    1516        <version>0.3.0</version>
    1617        <version_base>0.1</version_base>
     
    5354        <necessite id="lib:facebook-php-sdk-9513f08" src="https://github.com/facebook/php-sdk/zipball/v3.1.1" />
    5455        <necessite id="spip_bonux" version="[2.2.22;]" />
     56        <necessite id="SPIP" version="[2.1.0;2.1.99]" />
    5557</plugin>
Note: See TracChangeset for help on using the changeset viewer.