Как интегрировать автоматический вход SMF форума в CakePHP 2.x?

Я собираюсь интегрировать форум SMF v.2.0.9 в моей CakePHP 2.x. Я использую SSI.php

У меня есть таблица пользователей в cakephp и другое имя таблицы smf_members. Я успешно зарегистрировался, используя код CakePhp.

Я также успешно вошел в форум, но страница не перенаправлена ​​на мою страницу входа.

Мой код:

login.ctp

$_SESSION['login_url']='http://mydomainname.com/login';
$_SESSION['logout_url']='http://mydomainname.com/logout';

<form accept-charset="UTF-8" action="http://mydomainname.com/forum/index.php?action=login2" method="post">
      <input type="text" name="user" id="user" placeholder="Emailid" />
      <input type="password" id="passwrd" name="passwrd" placeholder="Password" />
      <input type="password" id="passwrd" name="passwrd" placeholder="Password" />
</form>

Над кодом успешно залогиниться. Но страница, не перенаправляющая его, остается на странице форума index.php. После входа мне нужно перенаправить страницу на http://mydomainname.com/login

Этот файл работает, если я пишу в ядре

Код:

login.php

<?php
include('forum/SSI.php');
$_SESSION['login_url']='http://mydomainname.com/login';
$_SESSION['logout_url']='http://mydomainname.com/logout';

/*echo "<pre>";
print_r($_SESSION); //exit;
echo "</pre>"; */
ssi_login();
?>

Пожалуйста, поделитесь своими знаниями.

Спасибо ChatFun

2 ответа

Решение

После долгих исследований, наконец, я получил одно решение.

Я создал внешний файл php в папке webroot

я пишу следующий код в external_login.php-

<?php
if(isset($_REQUEST['login'])){
session_start();
//include('forum/SSI.php');
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Redirecting...</title>

</head>

<body>
<div style="display:block; position:relative">
<div style="position:absolute; left:-200px;">
<form accept-charset="UTF-8" action="<?php echo 'forum/index.php?action=login2';?>" method="post" name="smf_login_frm" id="smf_login_frm">
<input type="text" name="user" id="user" width="1" style="width:1px;" value="<?php echo $_SESSION['Auth']['User']['email'];?>" />
<input type="password" id="passwrd" name="passwrd" style="width:1px;" value="<?php echo $_SESSION['passwd'];?>" />
</form>
</div>
</div>
<script>
setTimeout(function(){ validateSubscription(); }, 1000);

function validateSubscription() {
        //document.smf_login_frm.submit();
        document.getElementById("smf_login_frm").submit();
        return false;
}
</script>
</body>
</html>
<?php
}else if(isset($_REQUEST['logout'])){
include('forum/SSI.php');

global $context, $txt, $scripturl;
    $redirect_to = 'http://'.$_SERVER['HTTP_HOST'].'/login';
    $_SESSION['logout_url'] = $redirect_to;

    header('location:'.$scripturl . '?action=logout;' . $context['session_var'] . '=' . $context['session_id']);
    //$link = '<a href="' . $scripturl . '?action=logout;' . $context['session_var'] . '=' . $context['session_id'] . '">' . $txt['logout'] . '</a>';
    //echo $link;


}else{

}?>

Сначала я успешно вошел в систему CakePHP. тогда я буду перенаправлять на external_login.php. Там я получаю сеанс входа в CakePHP. Поэтому я назначаю имя пользователя и пароль, затем снова перенаправляю на страницу входа в форум smf. После успешного входа на страницу форума SMF снова перенаправляется на домашнюю страницу Cakephp, если я оба успешно залогинены.

действие входа в UsersController.php

public function login() {
        if ($this->Session->read('Auth.User')) {
            $this->redirect($this->webroot);
        } else {
            $this->layout = 'login';
            if ($this->request->is('post')) {
                $data=$this->request->data;
                $this->Session->write('passwd',$data['User']['password']);
                if (!$this->Auth->login()) {
                    $this->Session->setFlash(__('Your Email or Password was incorrect.'), 'error_message');
                }
            }
            if ($this->Session->read('Auth.User')) {
                $this->redirect($this->webroot . 'external_login.php?login&hash_token='.md5(time()));
                exit;
                /*if ($this->Session->read('Auth.User.type') == 1) {
                    $this->redirect($this->webroot . 'users/index');
                    exit;
                }
                if ($this->Session->read('Auth.User.type') == 2 || $this->Session->read('Auth.User.type') == 3) {
                    $this->redirect($this->webroot . 'myprofile');
                    exit;
                }*/
            }
        }
    }

Я новичок в CakePHP.

вы использовали action = "http://mydomainname.com/forum/index.php?action=login2" method = "post"

? action = login2 это как метод get, который вы пытаетесь использовать

попробуйте изменить метод = получить или удалить действие = логин2 сохраните его в скрытом HTML-элементе, используя свою запись

igonre, если я был неправ

Другие вопросы по тегам