نمونه کد لاگین با فریمورک کدایگنایتر به کمک وب سرویس USSD یکی از موارد مورد نیاز برنامه نویسان پی اچ پی مخصوصا کسانی است که به کدایگنایتر ، این فریمورک محبوب و قدرتمند ، علاقه مندند.
اگر با راهکار لاگین به واسطه وب سرویس USSD آشنایی ندارید، ما در مقاله ای بطور مفصل به بحث احراز هویت دومرحله ای با USSD پرداختهایم که پیشنهاد میکنیم قبل از ادامهی مقاله آن را مطالعه نمایید.
زیرا مخاطبین اصلی ما در این مقاله برنامه نویسان هستند ، سخن کوتاه میکنم و بیشتر به توضیح و تفصیل کدها میپردازم.
نمونه کد ساخت جدول دیتابیس برای لاگین با فریمورک کدایگنایتر
در این بخش یک جدول ساده برای آموزش ذخیره سازی اطلاعات دریافت شده از وب سرویس USSD آی نوتی ایجاد میکنیم که کد SQL آن به ترتیب زیر است.
defined('BASEPATH') OR exit('No direct script access allowed');
class Ussd_api extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->helper('string');
$this->load->helper('url');
$this->load->library('session');
$this->load->model('phone_model');
}
}
ایجاد کنترلر اصلی لاگین USSD با فریمورک کدایگنایتر
فریم ورک کدایگنایتر از معماری MVC پشتیبانی میکند ، بنابراین ما این در ادامه جهت ارتباط با وب سرویس های شرکت iNoti و دریافت شماره تلفن برای نمونه کد لاگین با فریمورک کدایگنایتر ، کنترلری ایجاد میکنیم.
defined('BASEPATH') OR exit('No direct script access allowed');
class Ussd_api extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->helper('string');
$this->load->helper('url');
$this->load->library('session');
$this->load->model('phone_model');
}
}
همانطور که ملاحظه میکنید در کانستراکتور کنترلر helper ها و پیش نیازهایی همچون MODEL فراخوانی شده است که شما میتوانید متناسب با صلاحدید و نیاز خود آنها را در حالت autoload قرار داده یا حتی فراخوانی
نکنید.
ساخت لایه MODEL نمونه کد لاگین با فریمورک کدایگنایتر
پس از کنترلر مدل را ایجاد میکنیم ، کتابخانه دیتابیس کدایگنایتر را در آن فراخوانی نموده و برای استفاده در لایه کنترل دو متد نیز به کلاس مدل ایجاد شده اضافه میکنیم. کد این لایه تا اینجای کار به ترتیب زیر است.
defined('BASEPATH') OR exit('No direct script access allowed');
class Phone_model extends CI_Model
{
public function __construct()
{
parent::__construct();
$this->load->database();
}
/////////////////////////////////////////////////////////////////////
public function get_last_row($field,$value)
{
$this->db->select('*');
$this->db->from('tbl_login');
$this->db->where($field,$value);
$this->db->order_by('login_id', 'DESC');
$this->db->limit(1);
$query = $this->db->get();
return $query->result_array();
}
////////////////////////////////////////////////////////////////////////////
public function has_phone($field,$value)
{
$this->db->from('tbl_login');
$this->db->where($field,$value);
return $this->db->count_all_results();
}
}
باید توجه داشته باشید که در این آموزش صرفا برای راحتی کار در شرایط آزمایشی ما متدی با عنوان get_last_row تعریف نمودیم .
در شرایط واقعی پروژه live مخصوصا پروژه های پر بازدید، باید راهکار مناسب جهت به دست آوردن سشن جاری جهت تشخیص مشخصات کاربر را متناسب با نوع کاربردتان اتخاذ نمایید.
ایجاد متد INDEX در کنترلر اصلی نمونه کد لاگین با فریمورک کدایگنایتر
در این قسمت به کمک متد input از هسته اصلی فریم کدایگنایتر شماره موبایل را از وب سرویس آی نوتی / inoti دریافت میکنیم. و در ادامه به کمک دو متد قبلی که در کلاس لایه MODEL ایجاد کردیم شرط if خود را هندل میکنیم.
public function index()
{
$mobile=$this->input->get('mobile', TRUE);
echo 'خوش آمدید';
if($this->phone_model->has_phone('login_phone',$mobile))
{
$result=$this->phone_model->get_last_row('login_phone',$mobile);
echo 'پسورد ساز هودینی';
echo 'رمز یکبار مصرف شما : ';
echo $result[0]["login_pass"];
echo '[end]';
}
else
{
echo 'لطفا ابتدا وارد سامانه شوید.';
}
}
دو متد دیگر را جهت تکمیل فرایند آزمایشی احراز هویت با USSD به کنترلر اصلی اضافه میکنیم. این متدها مرحله دوم authentication را انجام داده و سعی بر آن داشتیم تا با استفاده از کتابخانه سشن (session library) به انتقال قسمتی از اطلاعات بین لایه ها نیز بپردازیم ؛ به این ترتیب تا حدودی از امکانات بسیار گسترده فریمورک کدایگنایتر در این قطعه کدهای ابتدایی آموزشی بهره برده ایم که مثال های ارائه شده امکان گسترش و توسعه بهتری داشته باشد.
public function auth_step_2()
{
$login_phone=$this->input->post('phone', TRUE);
$login_pass=random_string('nozero', 4);
$data = array(
'login_phone' => $login_phone,
'login_pass' => $login_pass,
);
$this->phone_model->insert_phone($data);
$this->session->set_userdata('login_phone', $login_phone);
$this->load->view('login_2');
}
public function check()
{
$login_pass=$this->input->post('pass', TRUE);
$phone = $this->session->userdata('login_phone');
$result = $this->phone_model->get_last_row('login_phone',$phone);
if($login_pass==$result[0]['login_pass'])
{
echo 'تبریک ؛ عملیات لاگین موفقیت آمیز بود';
}else{
echo 'رمز عبور نا درست است';
}
}
فایل routes پروژه آموزشی لاگین با USSD
در ادامه کدهای فایل routes را که حاوی کدهای اندکی برای تنظیمات فریمورک است را خواهیم داشت. کسانی که با فریمورک کدایگنایتر آشنا هستند حتما اهمیت این فایل را میدانند ، routes در واقع ستون فقرات هر پروژه ای با کد ایگنایتر است.
توجه داشته باشید که قسمت index.php به واسطهی فایل .htaccess از URL ها حذف گردیده است. شما میتوانید نحوه انجام اینکار را از لینک زیر مطالعه نمایید.
آموزش حذف index.php از پروژه های codeigniter
$route['default_controller'] = 'Ussd_api';
$route['auth'] = 'Ussd_api/auth';
$route['step2'] = 'Ussd_api/auth_step_2';
$route['check'] = 'Ussd_api/check';
$route['get_phone'] = 'Ussd_api/get_phone';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
سخن پایانی
کدایگنایتر فریمورکی محبوب ، ساده ، استاندارد و توسعه پذیر است که بر روی بسیاری از هاستها و سرورهای متفاوت میتوان آن را پیاده سازی کرد.
codeigniter ساختاری هدفمند و قابل انعطاف برای کد نویسی تمیز ارائه میدهد که برنامه نویس را محدود به رعایت قوانین خشک نکرده و بسیار منعطف است. انعطاف کدایگنایتر برای برنامه نویس تا حدی است که حتی میتوان بدون رعایت ساختار MVC نیز با کدایگنایتر کدنویسی کرد.
با توجه به دلایل فوق الذکر در قسمت آموزش های کاربردی USSD کدایگنایتر را هم لحاظ کردیم تا با یک نمونه کد بسیار ساده امکانات قدرتمند وب سرویس های آی نوتی را از ابعاد کاربردی آن مورد بررسی قرار دهیم. در ادامه مطالبمان کدها ، کتابخانه ها و محصولات آماده و تجاری نیز ارائه خواهیم نمود.
تهیه و تنظیم تصاویر آرزو ارشاد