Codeigniter在simplelogin库中添加字段

时间:2012-12-14 03:44:14

标签: codeigniter

我是CI的新学员,并且在我的项目中关注这个CI简单登录库(see here),除了我想在数据库表中添加更多字段之外,这个简单库的一切都很好用,如何创建和获取新添加的字段?

此库的来源仅包含'id','username','email'和'password'字段,如果我想在'address'等字段中添加,并使其可用于创建用户{ {1}}并在视图中获取$this->simplelogin->create('user', 'user@mail.com', 'password', 'address', true);

感谢。

2 个答案:

答案 0 :(得分:1)

您可以更改:

  • 添加属性

    private $ address_field ='address'; //数据库中的地址

//确保您的数据库中必须包含字段address

长葛功能create():

function create($user = '', $email = '', $password = '', $address = '', $auto_login = TRUE) 
{
        // Check data is set
        if ($user == '' || $password == '' || $email == '')
            return FALSE;

        // Email or User already exists | Probably will not need to check the `address`
        $this->CI->db->where($this->user_field, $user);
        $this->CI->db->or_where($this->email_field, $email);
        $query = $this->CI->db->get($this->user_table);
        if ($query->num_rows() > 0)
            return FALSE;

        // Create user into the database
        $data = array($this->user_field=>$user, $this->email_field=>$email, $this->password_field=>crypt($password, $this->salt), $this->address_field=>$address);
        if (!$this->CI->db->insert($this->user_table, $data))
            return FALSE;

        // Automatically login to created account
        if ($auto_login) {        
            $this->CI->session->sess_destroy();
            $this->CI->session->sess_create();
            $this->CI->session->set_userdata(array('username'=>$user, 'email'=>$email,'address'=>$address));
        }

        return TRUE; // Created!
    }

长葛函数get_data_user():

function get_data_user($param = 'username') { // default is get session username
        $sess = $this->CI->session->userdata($param);
        if (!$sess)
            return '';

        return $sess;
    }

在登录功能中更改第106行:

$this->CI->session->set_userdata(array('username'=>$row[$this->user_field], 'email'=>$row[$this->email_field],'address'=>$row[$this->address_field])); // Set session data

答案 1 :(得分:0)

我担心没有简单的方法可以做到这一点

你需要将库Simplelogin.php修改为类似的东西 请记住,您需要将地址字段添加到表

<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');
/*
  SimpleLogin 0.0.3 https://launchpad.net/simplelogincodeigniter
  A CodeIgniter 2.X library for do a login system simple
  Author: costales http://launchpad.net/~costales
  Based on Anthony Graddy & Alex Dunae & Hitesh Ubharani's versions
  Licensed under LGPL3
 */

class Simplelogin {

    private $CI;
    private $user_table     = 'users';
    private $user_field     = 'username';
    private $email_field    = 'email';
    private $address_field  = 'address'; // add the name of the field in the database
    private $password_field = 'password';
    private $salt           = '$2a$07$R.gJbYU2N.FmA4hPp1y2CN$';

    public function __construct() {
        $this->CI = & get_instance();
    }

    /* Create a user account
     *
     * @access   public
     * @param    string
     * @param    string
     * @param    string
     * @param    bool
     * @return   bool
     */

    function create($user = '', $email = '', $password = '', $address = '', $auto_login = TRUE) {
        // Check data is set
        if ($user == '' || $password == '' || $email == '')
            return FALSE;

        // Email or User already exists
        $this->CI->db->where($this->user_field, $user);
        $this->CI->db->or_where($this->email_field, $email);
        $query = $this->CI->db->get($this->user_table);
        if ($query->num_rows() > 0)
            return FALSE;

        // Create user into the database
        $data = array(
            $this->user_field     => $user,
            $this->email_field    => $email,
            $this->address_field  => $address,
            $this->password_field => crypt($password, $this->salt)
        );
        if (!$this->CI->db->insert($this->user_table, $data))
            return FALSE;

        // Automatically login to created account
        if ($auto_login) {
            $this->CI->session->sess_destroy();
            $this->CI->session->sess_create();
            $this->CI->session->set_userdata(array(
                'username' => $user,
                'email'    => $email,
                'address'  => $address
            ));
        }

        return TRUE; // Created!
    }

    /* Delete user
     *
     * @access    public
     * @param integer
     * @return    bool
     */

    function delete($username = '') {
        if ($username == '')
            return FALSE;

        $data = array($this->user_field => $username);
        if ($this->CI->db->delete($this->user_table, $data))
            return TRUE; // Deleted
        else
            return FALSE; // Not deleted
    }

    /* Login user
     *
     * @access    public
     * @param     string
     * @param     string
     * @return    bool
     */

    function login($user = '', $password = '') {
        // Data was sent
        if ($user == '' OR $password == '')
            return FALSE;

        // Check if already logged in
        if ($this->CI->session->userdata('username') == $user)
            return TRUE;

        // Check user exists
        $data = array($this->user_field => $user);
        $query            = $this->CI->db->get_where($this->user_table, $data);
        if ($query->num_rows() != 1)
            return FALSE;

        // Check against password
        $row = $query->row_array();
        if (crypt($password, $this->salt) != $row[$this->password_field])
            return FALSE;

        $this->CI->session->sess_destroy(); // Destroy old session
        $this->CI->session->sess_create(); // Create a fresh, brand new session

        $this->CI->session->set_userdata(
                array(
                    'username' => $row[$this->user_field],
                    'email'    => $row[$this->email_field],
                    'address'  => $row[$this->address_field]
        )); // Set session data

        return TRUE; // Login was successful
    }

    /* Logout user
     *
     * @access    public
     * @return    void
     */

    function logout() {
        $this->CI->session->sess_destroy(); //Destroy session
    }

    /* Check if the user is logged
     * @access  public
     * @return  bool
     */

    function is_logged() {
        if ($this->CI->session->userdata('username'))
            return TRUE;
        else
            return FALSE;
    }

    /* Get current username or email
     * @access  public
     * @param   string
     * @return  string
     */

    function get_data_user($param = 'username') {
        if ($param == 'username')
            return $this->CI->session->userdata('username');
        if ($param == 'email')
            return $this->CI->session->userdata('email');
        if ($param == 'address')
            return $this->CI->session->userdata('address');
        return '';
    }

    /* Change password for a user
     * @access  public
     * @param   string
     * @param   string
     * @param   string
     * @return  bool
     */

    function change_password($user = '', $old_password = '', $new_password = '') {
        // Check data is set
        if ($user == '' || $old_password == '' || $new_password == '')
            return FALSE;

        // Check old password for this user
        $data = array($this->user_field     => $user, $this->password_field => crypt($old_password, $this->salt));
        $query                = $this->CI->db->get_where($this->user_table, $data);
        if ($query->num_rows() != 1)
            return FALSE;

        // Update password
        $data = array($this->password_field => crypt($new_password, $this->salt));
        $this->CI->db->where($this->user_field, $user);
        if (!$this->CI->db->update($this->user_table, $data))
            return FALSE;

        return TRUE;
    }

    /* Change email for a user
     * @access  public
     * @param   string
     * @param   string
     * @return  bool
     */

    function change_email($user = '', $new_email = '') {
        // Check data is set
        if ($user == '' || $new_email == '')
            return FALSE;

        // Update email
        $data = array($this->email_field => $new_email);
        $this->CI->db->where($this->user_field, $user);
        if (!$this->CI->db->update($this->user_table, $data))
            return FALSE;

        // Set new internal email
        $this->CI->session->set_userdata(array('email' => $new_email));
        return TRUE;
    }

}