TYPO3 fe_user 如何通过php代码登录用户? [英] TYPO3 fe_user how login user via php code?

查看:17
本文介绍了TYPO3 fe_user 如何通过php代码登录用户?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有 TYPO3 7.6.18 和扩展女性管理员.

I have TYPO3 7.6.18 and extension femanager.

$GLOBALS['TSFE']->fe_user->checkPid = '';
$info = $GLOBALS['TSFE']->fe_user->getAuthInfoArray();
$user = $GLOBALS['TSFE']->fe_user->fetchUserRecord($info['db_user'], $username);
$loginData = array('uname' => $username, 'uident' => $password, 'status' => 'login');

$GLOBALS['TSFE']->fe_user->forceSetCookie = TRUE;
$GLOBALS['TSFE']->fe_user->createUserSession($user);
$GLOBALS['TSFE']->fe_user->user = $GLOBALS['TSFE']->fe_user->fetchUserSession();

$loginSuccess = $GLOBALS['TSFE']->fe_user->compareUident($user, $loginData);

此代码不起作用.错误:

this code does't work. error:

PHP Catchable Fatal Error: Argument 2 passed to In2code\Femanager\Utility\LogUtility::log() must be an instance of In2code\Femanager\Domain\Model\User, boolean given, called in /home/abenteuer/public_html/typo3conf/ext/feusersplus/Classes/Controller/NewController.php on line 91 and defined in /home/abenteuer/public_html/typo3conf/ext/femanager/Classes/Utility/LogUtility.php line 48

是硬编码吗?可能存在更好的方法吗?

Is it hard code? May be exists better way ?

你知道如何通过php代码登录用户吗?

Do you know how login user via php code ?

推荐答案

对于 $loginData['uname'] 我使用电子邮件作为用户名,您可以简单地使用用户名自行更改($user->getUsername());

For the $loginData['uname'] i use the email as username, you can simply change it with the username it self ($user->getUsername());

Class StandardLogin:

<?php
namespace Ads\Adsmanager\Authentication\Login;

/**
 * Standard Login of users
 *
 * @author Andrei Todorut <todorutac@gmail.com>
 */
class StandardLogin extends \TYPO3\CMS\Frontend\Authentication\FrontendUserAuthentication implements LoginInterface
{    
    /**
     * 
     * @param \Ads\Adsmanager\Domain\Model\User $user
     * @return boolean
     */
    public function login(\Ads\Adsmanager\Domain\Model\User $user)
    {
        $passwordProcessor = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Saltedpasswords\\Salt\\PhpassSalt');

        $loginData = array(
            'uname' => $user->getEmail(), //usernmae
            'uident' => $user->getPassword(), //password
            'status' => 'login'
        );


        $this->checkPid = false;
        $info = $this->getAuthInfoArray();
        $info['db_user']['username_column'] = 'email';

        $user_db = $this->fetchUserRecord($info['db_user'], $loginData['uname']);
        if ($user_db && $passwordProcessor->checkPassword($user->getPassword(), $user_db['password'])) {

            $this->setSession($user_db);
            return true;
        }
        return false;
    }


    private function setSession($user_db) 
    {

        $GLOBALS['TSFE']->fe_user->createUserSession($user_db);
        $GLOBALS['TSFE']->fe_user->user = $user_db;
        $GLOBALS['TSFE']->fe_user->setKey('ses', 'fe_typo_user', $user_db);
    }
}

你的动作控制器:

<?php 
//...
//stuff
public function loginAction(\TYPO3\CMS\Extbase\Domain\Model\User $user)
{
    $login = new StandardLogin();
    $login->login($user);
}
//...

这篇关于TYPO3 fe_user 如何通过php代码登录用户?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆