Using Ion Auth as a separate module in the HMVC structure

前端 未结 6 1335
日久生厌
日久生厌 2020-12-14 13:09

I am interested in using ion auth for a project of mine which is running on the HMVC pattern. The application is written in Codeigniter.

The problem I face is once t

相关标签:
6条回答
  • 2020-12-14 13:39

    The solutions given by @ciuser and @Dash worked for me but auto loading the ion_auth does not because to the language files. So I kept the language folder content in the application/language folder and rest as a module which works like a charm.

    0 讨论(0)
  • 2020-12-14 13:40

    I wrote a bash script to Get and Install CodeIgniter 2 + Modular Extensions 5.4 + Ion Auth 2.

    Here it is. Good luck and let me know if there are any problems with it.

    #! /bin/bash
    
    echo "
    
    This will install Codeigniter 2, Modular Extensions 5.4 and Ion Auth 2!
    
    This script will TRY to download the packages for you.
    -----------------------------------------------------
    The resulting CodeIgniter install is already configured to remove the index.php
    from the URL and should ALMOST be ready to run!  Make sure to read the
    steps at the end of this.
    
    
    Good luck..
    
    
    Hit a key to continue or Ctrl-c to cancel now."
    
    
    read
    
    ## Download the files
    echo "Get CodeIgniter"
    wget -O CodeIgniter.zip http://codeigniter.com/download.php
    
    echo "Get Ion Auth"
    wget --no-check-certificate -O benedmunds-ion-auth.zip https://github.com/benedmunds/CodeIgniter-Ion-Auth/zipball/2
    
    echo "Get Modular Extensions"
    wget --no-check-certificate -O wiredesignz.zip https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/get/tip.zip
    
    ## Unpack all the files
    echo "Unpack Files"
    unzip CodeIgniter.zip
    rm CodeIgniter.zip
    unzip benedmunds-ion-auth.zip
    rm benedmunds-ion-auth.zip
    unzip wiredesignz.zip
    rm wiredesignz.zip
    
    ## Get the Dirs
    echo "Find Dirs"
    CI_DIR=`ls -c1 | grep ^CodeIgniter_`
    ME_DIR=`ls -c1 | grep ^wired`
    IA_DIR=`ls -c1 | grep ^ben`
    
    ## Make Modules Dir
    echo "Make Modules Dir"
    mkdir $CI_DIR/application/modules
    
    ## Move the Modular Extensions Files Into Place
    echo "Move Modular Extensions files"
    mv $ME_DIR/third_party/MX $CI_DIR/application/third_party
    mv $ME_DIR/core/* $CI_DIR/application/core/
    
    ## Remove the Modular Extension Dir
    echo "Remove ME Install Dir"
    rm -rf $ME_DIR
    
    ## Make Welcome Module Dir
    echo "Make Modular Welcome Dir"
    mkdir -p $CI_DIR/application/modules/welcome/controllers
    
    ## Move default welcome controller to the modules dir
    echo "Move Welcome Controller into Modules"
    mv $CI_DIR/application/controllers/welcome.php $CI_DIR/application/modules/welcome/controllers/
    
    
    ## Make Welcome Views Dir
    echo "Make Welcome Views Dir"
    mkdir -p $CI_DIR/application/modules/welcome/views
    
    ## Move Welcome View into modular dir
    echo "Move Welcome views into modular Welcome Dir"
    mv $CI_DIR/application/views/welcome_message.php $CI_DIR/application/modules/welcome/views/
    
    ## Rename Ion Auths Dir to Auth
    echo "Rename Ion Auth Dir to Auth"
    mv $IA_DIR $CI_DIR/application/modules/auth
    
    ## Update the Welcome Controller to extend MX_Controller instead of CI_Controller
    echo "Update Welcome Controller to extend MX_Controller"
    sed -i -e "s/CI_Controller/MX_Controller/" $CI_DIR/application/modules/welcome/controllers/welcome.php
    
    ## Update the default autoload file to include database and session libraries
    echo "Update autoload file to include the database and session libraries"
    sed -i -e "s/\$autoload\['libraries'] = array()/\$autoload['libraries'] = array('database','session')/" $CI_DIR/application/config/autoload.php
    
    ## Update the config file to remove index.php
    echo "Update config file to remove index.php"
    sed -i -e "s/\$config\['index_page'] = 'index.php';/\$config['index_page'] = '';/" $CI_DIR/application/config/config.php
    
    ## Update the Ion Auth libraries to use the auth resource
    echo "Update Ion Auth Lib to use the Auth Resources"
    sed -i -e "s/\$this->ci->load->config('ion_auth', TRUE);/\$this->ci->load->config('auth\/ion_auth', TRUE);/" $CI_DIR/application/modules/auth/libraries/Ion_auth.php
    sed -i -e "s/\$this->ci->lang->load('ion_auth');/\$this->ci->lang->load('auth\/ion_auth');/" $CI_DIR/application/modules/auth/libraries/Ion_auth.php
    sed -i -e "s/\$this->ci->load->model('ion_auth_model');/\$this->ci->load->model('auth\/ion_auth_model');/" $CI_DIR/application/modules/auth/libraries/Ion_auth.php
    
    ## Update the Ion Auth model to use the auth resource
    echo "Update the Ion Auth Model to use the Auth Resources"
    sed -i -e "s/\$this->load->config('ion_auth', TRUE);/\$this->load->config('auth\/ion_auth', TRUE);/" $CI_DIR/application/modules/auth/models/ion_auth_model.php
    sed -i -e "s/\$this->lang->load('ion_auth')/\$this->lang->load('auth\/ion_auth')/" $CI_DIR/application/modules/auth/models/ion_auth_model.php
    
    ## Update the Auth Controller to extend MX_Controller instead of CI_Controller
    echo "Update Auth Controller to extend MX_Controller"
    sed -i -e "s/CI_Controller/MX_Controller/" $CI_DIR/application/modules/auth/controllers/auth.php
    
    ## Update the Auth Controller so "$this->data" will be "$data"
    echo "Update the Auth Controller to change \$this->data to \$data"
    sed -i -e "s/\$this->data/\$data/" $CI_DIR/application/modules/auth/controllers/auth.php
    
    ## Move auth/views files up 1 level
    echo "Move auth/views files up 1 level"
    mv $CI_DIR/application/modules/auth/views/auth/* $CI_DIR/application/modules/auth/views/
    
    ## Remove the auth/views/auth dir
    echo "Remove the auth/views/auth dir"
    rmdir $CI_DIR/application/modules/auth/views/auth
    
    ## Make the routes.php file
    echo "Write the modules/auth/config/routes.php file"
    echo "<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    /*
    | -------------------------------------------------------------------------
    | URI ROUTING
    | -------------------------------------------------------------------------
    */
    
    \$route['auth/(:any)'] = \"auth/\$1\";
    
    /* End of file routes.php */
    /* Location: ./application/config/routes.php */
    
    
    " > $CI_DIR/application/modules/auth/config/routes.php
    
    echo "Creating the $CI_DIR/.htaccess file"
    echo "## Set up mod_rewrite
    
    <IfModule mod_rewrite.c>
    Options +MultiViews +FollowSymLinks
    DirectoryIndex index.php index.html
    
    # Enable Rewrite Engine
    # ------------------------------
    RewriteEngine On
    
    # UPDATE THIS TO POINT TO where you installed this FROM YOUR DOC ROOT.
    # If this is in the DOC ROOT, leave it as it is
    #---------------------
    RewriteBase /
    
    # In case your hosting service doesn't add or remove 'www.' for you, you can
    # do it here by uncommenting and updating the 'Rewrite*'s below.
    #
    # Add or remove 'www.'  Whichever you prefer.  
    # This one removes the 'www.' which seems to be the favorable choice these days. 
    # ------------------------------
    #RewriteCond %{HTTP_HOST} ^www.<sitename>.com
    #RewriteRule (.*) http://<sitename>.com/\$1 [R=301,L]
    
    # Redirect index.php Requests
    # ------------------------------
    RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
    RewriteCond %{THE_REQUEST} !/system/.*
    RewriteRule (.*?)index\.php/*(.*) \$1\$2 [R=301,L]
    
    
    # Standard ExpressionEngine Rewrite
    # ------------------------------
    RewriteRule modules/(.+)/controllers/(.+)\.php\$ /index.php?/\$1/\$2 [L,R=301]
    RewriteRule controllers/(.+)\.php\$ /index.php?/\$1 [L,R=301]
    
    RewriteCond \$1 !\.(css|js|gif|jpe?g|png) [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)\$ index.php/\$1 [L]
    
    </IfModule>" > $CI_DIR/.htaccess
    
    echo "
    
    *********** DON'T FORGET THESE STEPS ***********
    ====================================================================
    
    6 more steps:
    ==================
    1) Update the \$config['base_url'] var in application/config/config.php
    2) Update the \$config['encryption_key'] var in application/config/config.php
    3) Update your application/config/database.php file to work with your database,
    4) Run the Ion Auth SQL file located in application/modules/auth/sql.
    5) Now rename or move everything from $CI_DIR into where you set \$config['base_url']
    
    If you put your CodeIgniter files anywhere other than DOC ROOT you need to do step 6:
    6)Update the 'RewriteBase' in the .htaccess file in your CodeIgniter Directory to where your CodeIgniter files are.
    
    If your CodeIgniter files ARE IN the DOC ROOT of your webserver, you should be able to run from there like this:
    ---------------
    yourdomain.com
    yourdomain.com/auth
    
    
    If your CodeIgniter files AREN'T IN the DOC ROOT:
    Remember to update the RewriteBase to point to "your_ci_dir" (see below) in the .htaccess file and you should be able to run like this:
    --------------------------
    yourdomain.com/your_ci_dir
    yourdomain.com/your_ci_dir/auth
    
    ====================================================================
        YOU SHOULD BE DONE AFTER FOLLOWING THOSE STEPS!
    
    I think you should be up and running!
    
    
    Hope this all works!
    
    
    Please let me know if this worked for you or not!
    Edmund - edmundchaniii AT gmail.com
    
    C'ya!
    
    "
    
    0 讨论(0)
  • 2020-12-14 13:46

    Try this:

    1. Get: codeigniter.zip (CI2.0)
    2. Extract, make sure it is running, set config/config.php
    3. Get Modular Extension : HMVC
    4. Install - Copy MY_Loader & MY_Router to /core, MX to third party folder Do not copy MY_Controller - this is for Modular Separation and not Extensions
    5. Get Ion_auth
    6. Install the SQL for the Ion_auth
    7. Put Ion_auth into a modules folder /application/modules/users
    8. Add route in config/routes.php : $route['auth/(.*)'] = 'users/auth/$1';

    9. Autoload ion_auth - $autoload['libraries'] = array('database','session','users/ion_auth');

    10. Edit following paths in modules/users/library/ion_auth.php :

      $this->ci->load->config('users/ion_auth', TRUE);
      $this->ci->load->library('email');
      $this->ci->load->library('session');
      $this->ci->lang->load('users/ion_auth');
      $this->ci->load->model('users/ion_auth_model');
      
    0 讨论(0)
  • 2020-12-14 13:48

    I got CI 2.1 + Modular Extensions 5.4 + Ion Auth 2 all working.

    Since, I didn't really see any exact info on this and the stuff I did see, had a bunch of things like routing and stuff that I couldn't get working the way they were done, I decided to share the what I did to accomplish this.

    At first I was struggling with it, but then I had to sit back and think about what was going on.

    After that, it was actually pretty straight forward, only a couple of gotchas…

    The Steps I took to get ION AUTH working with CodeIgniter + MX HMVC

    1. Install CodeIgnter (I actually used an existing project I was working on, so it wasn't a fresh clean install. I removed "index.php" and I had HMVC already installed the recommended way. This is about Ion Auth anyway.)

    2. Get the latest version of Ion Auth.

    3. Instead of installing Ion Auth in application/third_party, Unzip it, and rename the resulting directory to auth. Put it in application/modules which results in application/modules/auth.

    4. Run Ion Auth's sql to set up the tables.

    5. In application/config/autoload.php update the line to:

      $autoload['libraries'] = array('database','session');
      
    6. In modules/auth/libraries/Ion_auth.php update the lines in __construct to:

      $this->ci->load->config('auth/ion_auth', TRUE);
      $this->ci->load->library('email');
      $this->ci->load->library('session');
      $this->ci->lang->load('auth/ion_auth');
      $this->ci->load->model('auth/ion_auth_model')
      
    7. In modules/auth/models/ion_auth_model.php update the lines in __construct to:

      $this->load->config('auth/ion_auth', TRUE);
      $this->load->helper('cookie');
      $this->load->helper('date');
      $this->load->library('session');
      $this->lang->load('auth/ion_auth');
      
    8. Change the auth controller (modules/auth/controllers/auth.php) to extend MX_Controller instead of the default CI_Controller.

    9. Now, in auth.php, make sure you change all $this->data to $data - (Make sure to read about this below!!).

    10. Move the files and directories in modules/auth/views/auth to modules/auth/views resulting in modules/auth/views with no lower level auth dir - (Make sure to read about this below!!).

    11. Add a routes.php file into modules/auth/config and add the following line:

      $route['auth/(:any)'] = "auth/$1";
      
    12. Now, go to http://yoursite/auth and everything should be good to go!

    Gotchas

    First off.. DO NOT AUTOLOAD THE LIBRARIES OR MODELS in the application/config/autoload.php file. Do them in the modules explicitly with $this->load->library("whatever"), etc…

    That one stumped me for quite a while.

    I forgot to mention that in my current install, I have already removed index.php from the URL and I have a .htaccess file in the the base of my installation. If things don't work, it's probably something with the RewriteBase here. This is the .htaccess I use:

    ## Set up mod_rewrite
    <IfModule mod_rewrite.c>
    Options +MultiViews +FollowSymLinks
    DirectoryIndex index.php index.html
    
    # Enable Rewrite Engine
    # ------------------------------
    RewriteEngine On
    
    # UPDATE THIS TO POINT TO where you installed this FROM YOUR DOC ROOT.
    # If this is in the DOC ROOT, leave it as it is
    #---------------------
    RewriteBase /
    
    # In case your hosting service doesn't add or remove 'www.' for you, you can
    # do it here by uncommenting and updating the 'Rewrite*'s below.
    #
    # Add or remove 'www.'  Whichever you prefer.  
    # This one removes the 'www.' which seems to be the favorable choice these days. 
    # ------------------------------
    #RewriteCond %{HTTP_HOST} ^www.<sitename>.com
    #RewriteRule (.*) http://<sitename>.com/$1 [R=301,L]
    
    # Redirect index.php Requests
    # ------------------------------
    RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
    RewriteCond %{THE_REQUEST} !/system/.*
    RewriteRule (.*?)index\.php/*(.*) $1$2 [R=301,L]
    
    # Standard ExpressionEngine Rewrite
    # ------------------------------
    RewriteRule modules/(.+)/controllers/(.+)\.php$ /index.php?/$1/$2 [L,R=301]
    RewriteRule controllers/(.+)\.php$ /index.php?/$1 [L,R=301]
    
    RewriteCond $1 !\.(css|js|gif|jpe?g|png) [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
    </IfModule>
    

    =================================

    When I updated the modules/auth/controllers/auth.php to extend MX_Controller instead of CI_Controller, I was getting a series of errors after. The first of these errors was:

        A PHP Error was encountered
    
        Severity: Notice
    
        Message: Undefined property: CI::$data
    
        Filename: MX/Controller.php
    

    To resolve this error, I changed all $this->data to $data in the auth.php controller`.

    After fixing this problem, when I would go to auth, I would get an error like this:

    Unable to load the requested file: auth/login.php
    

    Apparently, it can't find the view files in it's own views dir. Ahh. Not exactly true though after thinking about it. The reason is because it's trying to find module/file_to_view and the file_to_view should be in views! Not in auth/views/auth!! So, we need to move everyting up from the auth dir into the views dir!

    After that, everything works fine! I can cross load models, libraries and controllers in other modules and I can do Modules::run() in views and everything else!

    I hope this helps someone else. Good Luck!

    0 讨论(0)
  • 2020-12-14 13:53

    This is what I did following ciuser's guideline but with some changes:

    1. Do a clean install of Codeigniter. Set up config.php, database.php etc.
    2. Install Modular Extension:
      Move third_party/MX to CI/application/third_party.
      Move core/MY_Loader.php and core/MY_Router.php to CI/application/core.
    3. Install Ion Auth:
      Move the following Ion Auth folders to CI/application/modules/auth folder: config, controllers, language, libraries, models.
      Move the files under Ion Auth/views folder to CI/application/modules/auth/views. (Without one extra layer of auth as in Ion Auth.)
      Run Ion Auth sql in database.
    4. Check it at yourbaseurl/index.php/auth.
    0 讨论(0)
  • 2020-12-14 13:56

    I don't see any reason for it to not work . check out pyrocms

    They are using ionauth with hmvc.

    if you don't get it working, just upload the files in normal ci directories and check if it works without any problems.

    0 讨论(0)
提交回复
热议问题