2011-06-15 96 views
6

Estoy interesado en usar ion auth para un proyecto mío que se ejecuta en el patrón HMVC. La aplicación está escrita en Codeigniter.Uso de Ion Auth como un módulo separado en la estructura HMVC

El problema que enfrentamos es una vez que la autenticación de iones se coloca en la carpeta/app/módulos/auth, cuando intento acceder al módulo de recibo el siguiente error:

HTTP Error 500 (Internal Server Error):
An unexpected condition was encountered while the server was attempting to fulfill the request.

favor me ayude a cabo aquí , Estoy seguro de que estoy teniendo algún tipo de problema de configuración/ruta pero no puedo entender dónde.

Simplemente descargué los archivos ion_auth de github y coloqué los archivos extraídos como está en la carpeta del módulo eliminé todas las líneas donde carga las bibliotecas como base de datos, sesión ya que utilicé la configuración para cargarlas automáticamente . Pero dejé la carga de la biblioteca ion_auth.

En la carpeta del módulo modules/auth tengo una estructura de aplicación similar con las carpetas específicas de configuración del módulo, bibliotecas, etc.

Háganme saber dónde he hecho mal, continuaré buscando y solucionando este problema y publicando si tengo algo de suerte.

Respuesta

9

Prueba esto:

  1. Obtener: codeigniter.zip (CI2.0)
  2. Extracto, asegúrese de que se está ejecutando, set config/config.php
  3. Obtener modular Extensión: HMVC
  4. Instalar - Copiar MY_Loader & MY_Router to/core, MX a la carpeta de terceros No copiar MY_Controller - Esto es para Separación modular y no Extensiones
  5. Consigue Ion_auth
  6. Instalar el SQL para la Ion_auth
  7. Ponga Ion_auth en una carpeta de módulos/aplicaciones/módulos/usuarios
  8. Añadir ruta en config/routes.php: $route['auth/(.*)'] = 'users/auth/$1';

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

  10. Editar siguiente caminos en módulos/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'); 
    
1

No veo ninguna razón para que no funcione. echa un vistazo pyrocms

Están utilizando ionauth con hmvc.

si no lo hace funcionar, simplemente cargue los archivos en directorios ci normales y compruebe si funciona sin ningún problema.

+0

Gracias, Krish, verificaré con pyrocms y te mantendré informado. –

1

Esto es lo que hice siguiendo la directriz de ciuser pero con algunos cambios:

  1. hacer una instalación limpia de CodeIgniter. Configure config.php, database.php, etc.
  2. Instalar Extensión modular:
    Mover third_party/MX a CI/application/third_party.
    Mueva core/MY_Loader.php y core/MY_Router.php a CI/application/core.
  3. Instalar Ion Auth:
    Mueva las siguientes carpetas de Ion Auth a la carpeta CI/application/modules/auth: config, controladores, idioma, bibliotecas, modelos.
    Mueva los archivos de la carpeta Ion Auth/views a CI/application/modules/auth/views. (Sin una capa adicional de auth como en Ion Auth.)
    Ejecute Ion Auth sql en la base de datos.
  4. Compruébelo en yourbaseurl/index.php/auth.
10

Tengo CI 2.1 + Extensiones modulares 5.4 + Ion Auth 2 todo funcionando.

Dado que, realmente no vi ninguna información exacta sobre esto y las cosas que vi, tenían un montón de cosas como el enrutamiento y otras cosas que no funcionaba de la forma en que estaban hechas, decidí compartir lo que hice para lograr esto.

Al principio estaba luchando con eso, pero luego tuve que recostarme y pensar en lo que estaba pasando.

Después de eso, en realidad era bastante sencillo, sólo un par de trampas ...

los pasos que tomó para conseguir ION AUTH trabajar con CodeIgniter + MX HMVC

  1. Instalar CodeIgnter (que en realidad utilicé un proyecto existente en el que estaba trabajando, por lo que no fue una instalación nueva y limpia. Eliminé "index.php" y ya tenía HMVC instalado de la manera recomendada. Esto es sobre Ion Auth.)

  2. Get la última versión de Ion Auth.

  3. En lugar de instalar Ion Auth en application/third_party, descomprímalo y cambie el nombre del directorio resultante a auth. Póngalo en application/modules que resulta en application/modules/auth.

  4. Ejecute Ion Auth's sql para configurar las tablas.

  5. En application/config/autoload.php actualización de la línea a:

    $autoload['libraries'] = array('database','session'); 
    
  6. En modules/auth/libraries/Ion_auth.php actualización de las líneas en __construct a:

    $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. En modules/auth/models/ion_auth_model.php actualización de las líneas en __construct a:

    $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. Cambie el controlador auth (modules/auth/controllers/auth.php) para ampliar MX_Controller en lugar del CI_Controller predeterminado.

  9. Ahora, en auth.php, asegúrese de cambiar todas $this->data a $data - (Asegúrese de leer sobre esto más adelante !!).

  10. mover los archivos y directorios en modules/auth/views/auth a modules/auth/views resultando en modules/auth/views con no más bajo nivel auth dir - (Asegúrese de leer sobre esto más adelante !!).

  11. añadir un archivo routes.php en módulos/auth/config y agregue la siguiente línea:

    $route['auth/(:any)'] = "auth/$1"; 
    
  12. Ahora, vaya a http://yoursite/auth y todo debe ser bueno para ir!

Gotchas

En primer lugar .. NO Carga automática del bibliotecas o modelos del archivo application/config/autoload.php. Hágalos en los módulos explícitamente con $this->load->library("whatever"), etc ...

Ese me dejó perplejo durante bastante tiempo.

Olvidé mencionar que en mi instalación actual, ya he eliminado index.php de la URL y tengo un archivo .htaccess en la base de mi instalación. Si las cosas no funcionan, probablemente sea algo con RewriteBase aquí. Este es el .htaccess que utilizo:

## 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> 

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

Cuando actualicé los módulos/auth/controllers/auth.php para extender MX_Controller en lugar de CI_Controller, recibí una serie de errores después. El primero de estos errores fue:

A PHP Error was encountered 

    Severity: Notice 

    Message: Undefined property: CI::$data 

    Filename: MX/Controller.php 

Para resolver este error, he cambiado todo $this->data a $data en el auth.php controlador`.

Después de solucionar este problema, cuando iba a auth, me gustaría tener un error como este:

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

Al parecer, no puedo encontrar los archivos de vista en su propio views dir. Ahh. No es cierto, sin embargo, después de pensarlo. La razón es porque está tratando de encontrar module/file_to_view y el file_to_view debe estar en views! No en auth/views/auth !! Por lo tanto, tenemos que mover todo desde el directorio auth en el directorio views!

¡Después de eso, todo funciona bien! Puedo cargar modelos, librerías y controladores en otros módulos y puedo hacer Modules :: run() en vistas y todo lo demás.

Espero que esto ayude a alguien más. ¡Buena suerte!

+0

Escribí un script bash para que todo fuera aún más fácil, intenté pegarlo aquí, pero creo que es demasiado grande. Veré si se puede publicar en su propia publicación, si no, si alguien está interesado, hágamelo saber y averiguaré dónde publicarlo. – Dash

+0

El paso 10 es redundante, de alguna manera ... No hay necesidad de agregar -> ci-> variable de miembro, es decir, dejar '$ this-> load-> config ('users/ion_auth', TRUE);' como es – Andreyco

1

me escribió un script bash para conseguir e instalar CodeIgniter 2 extensiones modulares + 5,4 + Ion de autenticación 2.

Aquí está. Buena suerte y avíseme si hay algún problema con eso.

#! /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

Gracias y lo haré. –

+0

Si alguien que está leyendo esto está interesado, estoy desarrollando una forma de hacerlo utilizando un paquete de compositor que usa repositorios e instala scripts. Mira el perfil de github con el mismo nombre y busca un proyecto llamado Matches. Espero lanzar en menos de un mes a partir de ahora =] – Relequestual

0

Las soluciones dadas por @ciuser y @Dash trabajaron para mí, pero la carga automática del ion_auth no lo hace debido a los archivos de idioma.Así que mantuve el contenido de la carpeta del idioma en la carpeta de la aplicación/idioma y descanso como un módulo que funciona como un encanto.

Cuestiones relacionadas