Пару Сайтов

Делимся ссылками на иностранные сайты, построенными на cms concrete5

Re: Пару Сайтов

Сообщение Count_Raven » 22 ноя 2013, 23:39 ,  »  Сообщение:#16

vbnm писал(а):Count_Raven добре, ваша тчк зрения мне понятна.
Для мну все, что выполняется на строне пользователя за счет Ява, таковым и является.

Так что будем смотреть сегодня Open ID

Ну вот, хоть кто-то разбереться с этим нерабочим причиндалом. :lol:

Если у вас на стороне сервера работает Java, то вы не можете использовать Concrete5.
Если что, к сведению. Нет у вас Java таки никак. Нельзя Java использовать с Concrete5, только applet на клиенте, которые уже несколько лет как запрещены и сам тег убран из спецификации.
А то, что используется в браузере, то JavaScript (ECMAScript), то далеко не Java. Уж что и сопоставить с Java, так это C# на первой стадии .NET. Там правда копия Java с улучшениями. C# это есть прогресс Java.

У вас давно ничто не выполняется на стороне пользователя за счет Java. Java-applets умерли и вместо них лет 10-15 назад уже используется Flash.
Все остальные функции по поводу jQuery, MooTools, Modernizr и прочее, это JavaScript, а точнее ECMAScript, они не имеют никакого отношения к Java, кроме одного слова в названии.
Country Amiant - Regno All Rianto
Аватара пользователя
Count_Raven
Супермодератор
 
Сообщения: 1156
Зарегистрирован: 06 окт 2010, 15:00
Откуда: Country Amiant

Re: Пару Сайтов

Сообщение sergio11ofpp » 23 ноя 2013, 17:18 ,  »  Сообщение:#17

В общем вот что получилось.
По порядку.
HTML:
Код: Выделить всё
<a href="#facebook" id="f_in">ВОЙТИ ЧЕРЕЗ FACEBOOK</a>
<div id="fb-root"></div>

JS:
Код: Выделить всё
var reg = "<?php echo Loader::helper('concrete/urls')->getToolsURL('social_reg'); ?>";
$('#f_in').click(function (event) {
    event.preventDefault();
    login();
  });
window.fbAsyncInit = function() {
   FB.init({
     appId      : 'ВАШ APP ID', // App ID
     channelURL : '', // Channel File, not required so leave empty
     status     : true, // check login status
     cookie     : true, // КУКИ ОБЯЗАТЕЛЬНЫ
     oauth      : true, // enable OAuth 2.0
     xfbml      : false  // parse XFBML
   });
};
(function() {
   var e = document.createElement('script'); e.async = true;
   e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';               
   document.getElementById('fb-root').appendChild(e);
}());
function login(){
    FB.getLoginStatus(function(response){
        if(response.status === 'connected'){
                getCurrentUserInfo(response);
        }else{
            FB.login(function(response) {
                if(response.authResponse) {
                  //if (response.perms)
                      getCurrentUserInfo(response);
                } else {
                  console.log('Auth cancelled.')
                }
            },{scope:'email, user_birthday'}); // Какие права взять у Юзера
        }
    });
}
function getCurrentUserInfo() {
      FB.api('/me', function(userInfo) {
         do_reg(userInfo);
    });
}
function do_reg(userInfo){
   var dataString = "facebook=fblogin"; //не обязательно, но я сделал чтоб был 1 файл для соц логина facebook=fblogin&vk="vklogin" В общем сомтря через какую соц сеть
     $.ajax({
          type:'POST',
          url: reg, //url php я использую toolS var reg = "<?php echo Loader::helper('concrete/urls')->getToolsURL('social_reg'); ?>";
          data: dataString,
           success:function(data){
             console.log(data);      
          },
          error:function(){

        }
   });
}


И PHP
Код: Выделить всё
<?php  defined('C5_EXECUTE') or die("Access Denied.");
require_once('fb_php_sdk/facebook.php'); //FACEBoOK PHP SDK 3.0
$facebook = new Facebook(array(
  'appId'  => 'APP_ID', //ID Приложения
  'secret' => 'APP_SECRET', //Секрет Приложения
  'cookie' => true 
));
$facebook_user = $facebook->getUser();
if ($facebook_user) {
  try {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me'); //Берём инфо юзера так как мы уже спросили всё через JS SDK должно тут всё пройти хорошо

  } catch (FacebookApiException $e) {
    error_log($e);
    $facebook_user = null;
  }
}
if($facebook_user){ //если всё хорошо
   $username = $user_profile['name']; //имя
   $email = $user_profile['email']; //email
   $ui = UserInfo::getByEmail($email);  //C5  Информация о Юзере через Email
   if(is_object($ui)){ Если есть такой Юзер с Email
      $uo = $ui->getUserObject(); //Берём Объект Юзера через UserInfo
      if($uo->isLoggedIn()){ // проверяем если пользователь уже в системе залогинин ( всистеме C5)
         echo 'you are already logged in!';
      }else{ //если нет Логиним Юзера через его ID
          $uo->loginByUserID($ui->getUserID());
          echo 'Now logged in!';
      }
   }else{ //Если Юзера нет регестрируе нового
                $pass = pass_gen(12); Генерируем Пароль Обязательно То есть мы можем пароль отослать на мыло и пользоватль может стандартно зайти в C5 без соц сети
      $userData['uName'] = $username;
      $userData['uEmail'] = $email;
      $userData['uPassword'] = $pass;
      $userData['uPasswordConfirm'] = $pass;
      $process = UserInfo::register($userData); //Регестрируем
         if (is_object($process)) {      
                  $mh = Loader::helper('mail');
                                 $mh->setBody("Ваш Пароль: ".$pass); //отслыаем пароль
                  $mh->to($email);
                  $mh->sendMail();
                  $u = new User;
                                     $u->loginByUserID($process->getUserID());   //логиним нового юзера
                                     echo 'Registred and Now logged in!';      
         }
   }
}
function pass_gen($length) //генерируем пароль
   {
      $random= "";

      srand((double)microtime()*1000000);

      $data = "AbcDE123!IJKLMN67QRSTUVWXYZ";
      $data .= "aBCdefghijklmn123opq45rs67tuv89wxyz";
      $data .= "0FGH45OP89";

      for($i = 0; $i < $length; $i++)
      {
         $random .= substr($data, (rand()%(strlen($data))), 1);
      }

      return $random;
   }



Незнаю на сколько правильно это, но при одном клике Юзер Регистрируется в системе C5(на вашем сайте) через его Данные с Соц сети мне кажется очень удобно...
То есть вам не нужно потом проверять если юзер залогинин в Facebook Вам достаточно првоерить если юзер залогини в вашей системе.!!

Если есть какие Предложения буду рад выслушать!)))
sergio11ofpp
 
Сообщения: 53
Зарегистрирован: 05 июл 2013, 12:00

Re: Пару Сайтов

Сообщение sergio11ofpp » 23 ноя 2013, 17:58 ,  »  Сообщение:#18

Единсвенная проблема тут это USername
Будет Ошибка если Email Разные а имя Одинаковое в Facebook
То есть если у меня Сергей - и У друго Сергей COncrete5 Выдаст ошибку как дупликат в Mysql х3 что делать
sergio11ofpp
 
Сообщения: 53
Зарегистрирован: 05 июл 2013, 12:00

Re: Пару Сайтов

Сообщение Count_Raven » 23 ноя 2013, 18:59 ,  »  Сообщение:#19

sergio11ofpp писал(а):Единсвенная проблема тут это USername
Будет Ошибка если Email Разные а имя Одинаковое в Facebook
То есть если у меня Сергей - и У друго Сергей COncrete5 Выдаст ошибку как дупликат в Mysql х3 что делать

вы имя пользователя бере?
пусть авторизация будет по email.
Country Amiant - Regno All Rianto
Аватара пользователя
Count_Raven
Супермодератор
 
Сообщения: 1156
Зарегистрирован: 06 окт 2010, 15:00
Откуда: Country Amiant

Re: Пару Сайтов

Сообщение sergio11ofpp » 23 ноя 2013, 19:38 ,  »  Сообщение:#20

Не дело в том что при засписи
Код: Выделить всё
$userData['uName'] = $username;

Должны Быть Разными
sergio11ofpp
 
Сообщения: 53
Зарегистрирован: 05 июл 2013, 12:00

Re: Пару Сайтов

Сообщение Count_Raven » 23 ноя 2013, 21:15 ,  »  Сообщение:#21

sergio11ofpp писал(а):Не дело в том что при засписи
Код: Выделить всё
$userData['uName'] = $username;

Должны Быть Разными

Я уже написал, используйте email.
Country Amiant - Regno All Rianto
Аватара пользователя
Count_Raven
Супермодератор
 
Сообщения: 1156
Зарегистрирован: 06 окт 2010, 15:00
Откуда: Country Amiant

Re: Пару Сайтов

Сообщение sergio11ofpp » 24 ноя 2013, 01:52 ,  »  Сообщение:#22

В общем маленькие поправочки:
Добавте эту строчку если у вас стоит потверждение по Email
Код: Выделить всё
if (is_object($process)) {
   $process->setAttribute('user_name', $username);
   $process->markValidated();


Так же на счёт Username Спасибо Count_Raven
Вместо Имя втыкайте Email...

А если хотите Именно имя создайте Аттрибут

Код: Выделить всё
if (is_object($process)) {
   $process->setAttribute('user_name', $username);


Так же если хотите выводить имя Можно просто сделать if
Код: Выделить всё
$u = new User();
if($u->IsLoggedIn()){
   $ui = UserInfo::getByID($u->getUserID());
   $user_name = $ui->getAttribute('user_name');
   if(empty($user_name) || $user_name == ''){
          echo $u->getUserName();
   }else{
           echo $user_name;
   }
}


То есть если юзер Регался при нормально регистрации выведет Имя То которое он ввёл а если при Facebook выведит Аттрибут))

Надеьсь кому то помог Я ещё посомтрю что мона сделать

Сейчас пытаюсь сделать тоже самое для VK но там документация не очень мне понятно(((
sergio11ofpp
 
Сообщения: 53
Зарегистрирован: 05 июл 2013, 12:00

Re: Пару Сайтов

Сообщение vbnm » 24 ноя 2013, 23:29 ,  »  Сообщение:#23

sergio11ofpp писал(а):В общем маленькие поправочки:
Добавте эту строчку если у вас стоит потверждение по Email
Код: Выделить всё
if (is_object($process)) {
   $process->setAttribute('user_name', $username);
   $process->markValidated();


Так же на счёт Username Спасибо Count_Raven
Вместо Имя втыкайте Email...

А если хотите Именно имя создайте Аттрибут

Код: Выделить всё
if (is_object($process)) {
   $process->setAttribute('user_name', $username);


Так же если хотите выводить имя Можно просто сделать if
Код: Выделить всё
$u = new User();
if($u->IsLoggedIn()){
   $ui = UserInfo::getByID($u->getUserID());
   $user_name = $ui->getAttribute('user_name');
   if(empty($user_name) || $user_name == ''){
          echo $u->getUserName();
   }else{
           echo $user_name;
   }
}


То есть если юзер Регался при нормально регистрации выведет Имя То которое он ввёл а если при Facebook выведит Аттрибут))

Надеьсь кому то помог Я ещё посомтрю что мона сделать

Сейчас пытаюсь сделать тоже самое для VK но там документация не очень мне понятно(((


а может вам просто копнуть уже готовые решения?
Вот, к примеру есть
Пожалуйста зарегистрируйтесь, чтобы увидеть ссылку

вот еще
Пожалуйста зарегистрируйтесь, чтобы увидеть ссылку
vbnm
 
Сообщения: 462
Зарегистрирован: 02 июл 2011, 01:44

Пред.

Вернуться в Иностранные сайты под управлением concrete5

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron