fatfree用户身份验证全局变量

时间:2014-07-10 12:45:17

标签: php authentication fat-free-framework

Iam使用内置功能授权我的用户。但是没有设置用户名全局的胖子?找不到它

    $angemeldet = new \DB\SQL\Mapper($this->db, 'users');
    $auth = new \Auth($angemeldet, array('id'=>'name', 'pw'=>'email'));
    $auth->basic(); // a network login prompt will display to authenticate the user

这很有效。

http://www.willis-owen.co.uk/2013/02/blog-tutorial-with-fat-free-framework-v3/ 在这里,我发现他正在SESSION中设置它。但是,如果我尝试访问它,它的完全空。我在哪里可以找到用户名?

我该如何操纵密码?所以我可以比较哈希?

4 个答案:

答案 0 :(得分:1)

请看下面的代码:

public function verify($f3, $params) {
    $username = $f3->get('POST.email');
    $password = $f3->get('POST.password');
    $hashedPassword = md5($password);
    $submit = $f3->get('POST.submit');

    if (isset($submit)) {
        global $db;
        $user = new DB\SQL\Mapper($db, 'users');

        // username is email, password is password in our case
        $auth = new \Auth($user, array('id' => 'email', 'pw' => 'password'));
        $loginResult = $auth->login($username, $hashedPassword); // Cross-check with users with hashedPassword

        // Authenticated the user successfully
        if ($loginResult == true) {
            $f3->set('message', 'Logged in successfully.');
            $f3->reroute('/login');
        }
    } else {
        $f3->set('message', 'Please enter valid username/password');

    }
   $f3->reroute('/login');

}

在上面的代码中,您可以看到我在密码中使用了md5哈希。这可能会让您了解您想要实现的目标。

答案 1 :(得分:1)

默认情况下,F3 Auth不会将用户设置为SESSION,您必须自己执行此操作。您无法在SESSION中存储PDO对象,因为它们无法序列化。用户名将存储在SERVER.PHP_AUTH_USER中,因此您可以使用该用户名来获取$user

要散列密码,请将函数传递给$auth->basic( function( $password ){} );并返回散列密码。将SHA256与盐一起使用将比MD5安全得多。

这是我用来做BASIC身份验证的代码。

// I call this from the constructor of the handler of secure pages.
public static function authenticate(){
    // map to the users db table
    $user = new \DB\SQL\Mapper( F3::get( 'db' ), 'users' );
    // tell F3 to use the columns username and password
    $auth = new \Auth( $user, array( 'id'=>'username', 'pw'=>'password' ) );
    // check to see if they are authed, use a function to create hashed password
    $authenticated = $auth->basic( function ( $password ){
        $salt = 'Some secure salt string...';
        return hash( 'sha256', $password . $salt );
    } );
    // if we are logged in and the user isn't set....
    if ( $authenticated && !F3::exists( 'user' ) ){
        // use SERVER.PHP_AUTH_USER to load user by username 
        $user->load( array( 'username=?', F3::get( 'SERVER.PHP_AUTH_USER' ) ) );
        // set user to variable if it could be loaded
        if ( !$user->dry() ){
            F3::set( 'user', $user );
        }
    }
}

答案 2 :(得分:0)

检查基本身份验证方法的API文档:http://fatfreeframework.com/auth#basic

我认为它应该像

$auth->basic(function($input){
  return md5($input);
}); 

遗憾的是,此方法不会返回有效登录的任何用户数据。但是由于对象是通过php中的引用传递的,所以如果填充了一些数据,您可以尝试在auth进程之后查看映射器var_dump($angemeldet->cast());

答案 3 :(得分:0)

根据我的经验,这是执行基本(浏览器弹出窗口)身份验证的最简单方法:

function renderAdmin() {
    $user=new DB\SQL\Mapper($this->db,'users');
    $auth== null;
    $auth = new \Auth($user, array('id'=>'username', 'pw'=>'password'));
    $login_result = $auth->basic();
    if ($login_result) $f3->set('SESSION.username','SERVER.PHP_AUTH_USER');
    if (!$f3->get('SESSION.username')) $f3->error(401);
    else {          
        // all your code for the admin section
        echo \Template::instance()->render('admin.html'); 
    }
}