Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
HooLIGUN

Внешняя авторизация IPB 3.4.9

Recommended Posts

Здравствуйте. Подскажите пожалуйста актуальный скрипт дня авторизации на стороннем php файле для форума версии 3.4.9 , Поиском пользовался, но думаю, там устарелые версии

Share this post


Link to post
Share on other sites

Поиском пользовался, но думаю, там устарелые версии

Покажите,что нашли?

Share this post


Link to post
Share on other sites

php class

<?php

/**
* IBResource, LTD; Ritsuka, UnLTD
* IP.Board 
* Member authorization API file
*
* @author      GiV, Ritsuka 
* @copyright   (c) 2010 IBResource, LTD.
* @link        http://www.ibresource.ru
* @version     1.0.0
*
*/
if ( ! class_exists( 'apiCore' ) )
{
   require_once( FORUM_PATH . 'admin/api/api_core.php' );
}

class apiMemberLogin extends apiCore
{
   private $_handler = NULL;
   public $path_to_ipb = FORUM_PATH;

   public function childInit()
   {
       require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );
       require_once( IPS_ROOT_PATH . 'sources/handlers/han_login.php' );
       $this->_handler =  new han_login( $this->registry );
       $this->_handler->init();        
   }

   public function login( $username, $password, $remember = TRUE )
   {
       $this->request['username'] = $username;
       $this->request['password'] = $password;
       $this->request['rememberMe'] = $remember;
       return $this->_handler->verifyLogin();
   }

   public function logout()
   {
       IPSCookie::set( "member_id" , "0"  );
       IPSCookie::set( "pass_hash" , "0"  );
       IPSCookie::set( "anonlogin" , "-1" );
       if( is_array( $_COOKIE ) )
       {
           foreach( $_COOKIE as $cookie => $value)
           {
               if ( stripos( $cookie, $this->settings['cookie_id'] . 'ipbforumpass' ) !== false )
               {
                   IPSCookie::set( $cookie, '-', -1 );
               }
           }
       }
       $this->registry->member()->sessionClass()->convertMemberToGuest();
       return true;
   }

   public function getMember()
   {
       return $this->registry->member()->fetchMemberData();
   }

}

 

Код

<?php
//header('Content-type: text/html; charset=utf-8');

define( 'FORUM_PATH', $_SERVER['DOCUMENT_ROOT'].'/forum31/');
require_once( FORUM_PATH . 'admin/api/member/api_member_login.php' );
$apiMember = new apiMemberLogin();
$apiMember->init();

/* Авторизация */

if( $_POST['login'] && $_POST['password'] )
{
   $login = $_POST['login'];
   $password = $_POST['password'];

   $ret = $apiMember->login( $login, $password );

   if( $ret[2] )
   {
       if( $ret[2] == 'wrong_auth' )
       {
           echo 'Неверный логин или пароль<br>';
       }
       else
       {
           echo 'Ошибка авторизации: {$ret[2]}<br>';
       }
   }
   else
   {
       echo '<html><head><meta http-equiv="refresh" content="2;url=index.php"></head><body>Вы вошли в систему!</body><html>';
       exit;
   }
}

/* Выход */

if( $_GET['do'] == 'logout' )
{
   $apiMember->logout();
   echo '<html><head><meta http-equiv="refresh" content="2;url=index.php"></head><body>Выход из системы</body><html>';
   exit;
}

$member = $apiMember->getMember();

if($member['member_id'])
{
   //print_r( $member );
   echo 'Вы залогены как '.$member['name'].' <a href="index.php?do=logout">Выход</a><br />';
}
else
{
   echo 'Вы не авторизированы<br />
   <form name="form_login" action="index.php?do=login" method="post">
       <input name="login" type="text"><br />
       <input name="password" type="password"><br />
       <input type="submit" value="Отправить">
   </form>
   ';
}

unset($apiMember);
?>

 

Вроде как это под 3.0.*

Share this post


Link to post
Share on other sites

Только в этом отличие,и всё?

Share this post


Link to post
Share on other sites

Всегда можно протестировать работу скрипта. И, если что-то не работает, исправить.

Share this post


Link to post
Share on other sites

Как сделать, чтобы данные выводились сразу после отправки формы, минуя обновления страницы с сообщением "Вы вошли в систему!"

то есть

Вместо этого

        echo '<html><head><meta http-equiv="refresh" content="0;url=result.php?do=success"></head><body>Вы вошли в систему!</body><html>';
       exit;

сразу были данные юзера.

 

Ввел данные - нажал отправить - страница с данными (без всяких переадресаций)

Edited by HooLIGUN

Share this post


Link to post
Share on other sites
ipsRegistry::instance()->output->silentRedirect( "ссылка" );

  • Upvote 1

Share this post


Link to post
Share on other sites

Обнаружил баг

При использовании логина с спец символами, авторизация не проходит

По крайней мере со знаком "!" авторизация не удается ("wrong_auth"). Возможно исправить?

 

/* Авторизация */
if( $_POST['login'] && $_POST['password'] )
{
   $login = $_POST['login'];
   $password = $_POST['password'];
   $ret = $apiMember->login( $login, $password );
   if( $ret[2] )
   {
       if( $ret[2] == 'wrong_auth' )
       {
        //Неверные данные
       }
   }
   else
   {
//Авторизация успешна
   }
}

Share this post


Link to post
Share on other sites
По крайней мере со знаком "!" авторизация не удается ("wrong_auth"). Возможно исправить?

Замените

$login = $_POST['login'];

на

$login = ipsRegistry::$request['login'];

  • Upvote 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...