登录方法借鉴

<?php
defined(‘BASEPATH‘) OR exit(‘No direct script access allowed‘);
/**
* Created by PhpStorm.
* User: huangyaokui
* Date: 16/4/23
* Time: 下午2:17
*/
class Common_Controller extends CI_Controller
{
protected $user_id = 0;
protected $session_data = [];
//不用用户认证的方法在$except数组里配置
protected $except = [];

public function __construct()
{
parent::__construct();

try{
$this->authentication();
}catch (Exception $e){
$this->errorResponse($e);
}
}

/**
* 是否需要登录认证
* @return bool
*/
private function isCheck()
{
$array = array_change_key_case(array_flip($this->except));
$method = strtolower($this->router->method);

return array_key_exists($method, $array) ? false : true;
}

/**
* 登录认证
* @throws Exception
*/
private function authentication()
{
if ( $this->isCheck() ) {
$token = $this->input->get_post(‘token‘, true);

if ($token) {
$this->checkCache(trim($token));
}else{
throw new Exception(‘请登录‘, ‘401‘);
}
}
}

/**
* 从缓存里查询用户是否登录
* @param $token
* @throws Exception
*/
private function checkCache($token)
{
$data = [];
if ( $this->cache->memcached->is_supported() ){
$data = $this->cache->memcached->get($token);
if (!$data) {
$data = $this->checkData($token);
}
}else{
$data = $this->checkData($token);
}

if ($data) {
$this->user_id = $data[‘userId‘];
$this->session_data = $data;
}else{
throw new Exception(‘请登录‘, ‘401‘);
}
}

/**
* 从数据库认证
* @param $token
* @throws Exception
*/
private function checkData($token)
{
$this->load->model(‘token_model‘);

$result = $this->token_model->get([
‘where‘ => [
‘token‘ => $token
],
‘default_limit‘ => 1,
‘order‘ => ‘created desc‘
]);

if ($result) {
if ($result[‘0‘][‘expire‘] < time()) {
throw new Exception(‘请重新登录‘, ‘401‘);
}

$this->session_data = json_decode($result[‘0‘][‘data‘], true);
$this->user_id = $this->session_data[‘userId‘];
}else{
throw new Exception(‘请登录‘, ‘401‘);
}
}

/**
* 成功返回
* @param array $data
*/
protected function successResponse(array $data)
{
echo json_encode([
‘data‘ => $data ?: new stdClass(),
‘status‘ => 0,
‘message‘ => ‘‘
]);
exit;
}

/**
* 失败返回
* @param $code
*/
protected function errorResponse(Exception $exception)
{
echo json_encode([
‘data‘ => new stdClass(),
‘status‘ => $exception->getCode(),
‘message‘ => $exception->getMessage()
]);
exit;
}
}

时间: 2024-10-07 21:57:48

登录方法借鉴的相关文章

修改SQLServer中sa验证登录方法

转载请注明出自朱朱家园http://blog.csdn.net/zhgl7688 修改SQLServer中sa验证登录方法: 1.  在开始菜单中找到SQLServer Management Studio,双击打开,采用Windows身份验证进入. 2.  选中"服务器名称",点击右键,选择"属性",打开服务器属性窗口. 3.  在打开的窗口中左侧列表中找到"安全性"并选中,在窗口右侧出现的服务器身份验证中选中"SQL Server和W

回车键实现登录方法

代码: html表单代码: <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="wi

ECSHOP手机号码或邮箱用户名都可以登录方法

ECSHOP手机号码或邮箱用户名都可以登录方法 ECSHOP教程/ ecshop教程网(www.ecshop119.com) 2013-06-30 有不少人都在找支持ECShop用户名.邮箱或手号码登录的插件,下面就讲一下如何实现用户名.邮箱或手机号码登录ECShop. 找到user.php 的以下代码: if (empty($_POST['captcha'])) { show_message($_LANG['invalid_captcha'], $_LANG['relogin_lnk'], '

登录方法测试

package com.hopetesting.dao; import com.hopetesting.domain.User;import com.hopetesting.util.JDBCUtil;import org.springframework.jdbc.core.BeanPropertyRowMapper;import org.springframework.jdbc.core.JdbcTemplate; /** * @author newcityman * @date 2019/8

mysql 登录方法

1.mysql <==刚装完系统无密码情况登录方式.不要密码 2.mysql -uroot  <== 刚装完系统无密码情况登录方式,不要密码. 3.mysql -uroot -p <==这 里标准的dba命令行登陆命令 4.mysql -uroot -p'123456' <==非脚本一般不棕样用,密码明文会泄露密码.可以掩饰history 功能解决. mysql多实例的登陆方法 mysql -uroot -p -S  /data/3306/mysql.sock 注意:多实例的远程连

raspberry-同路由器用putty和vnc桌面登录方法

一个raspberry B,家里电脑是win10系统. 最初是用HDMI连家里电视机的显示屏来当桌面的,没有配置就好用,但第二次再开机发现怎么弄都显示无信号,排除SD卡不活动.HDMI接口被烧坏等可能,初步判断是线不好用了. 便改用网上推荐的方法:ssh+vnc桌面远程登录树莓派. 家里的路由器离电脑有5米远,这个方法也很好用.下面在记录一下途中遇到的问题和解决办法. 需要设备:树莓派.读卡器.网线.路由器.电脑一台. 1.将树莓派电源接通,将网线一端连在树莓派网口上,另一端连接至路由器. 2.

win7用户账户自动登录方法

为了计算机安全,相信使用Windows7系统的朋友大多都为自己的用户账户设置了或简单或复杂的密码,其实对于个人电脑来说,开机登录输入密码有时候会显得累赘,毕竟用户账户密码不仅仅是为了防止他人登录. 那么有没有方法既设置了用户密码又可以省掉登录输入密码这一步骤呢? 有啊 在开始菜单中搜索"运行",回车打开,或者Win+R打开运行窗口. 键入"control userpasswords2"或者"rundll32 netplwiz.dll,UsersRunDll

Amazon EC2 vps申请和shell登录方法

前段时间在阿里云申请了一个域名,一直未用.近期想建一个个人博客,记录一些个人工作,学习,生活日志.本想使用国内虚拟主机,一是备案比较麻烦,二是费用也有一点点高.于是放弃,决定使用海外空间,申请了AWS(Amazon Web Services) 的云服务EC2(Elastic Compute Cloud)免费试用套餐(一年).如下: 免费套餐* 作为 AWS 免费试用套餐的一部分,AWS 的新客户可免费开始使用 Amazon EC2.注册后,新 AWS 客户在一年内每个月都将获得以下 EC2 服务

winfrm登录方法

----------------转载---------------------- 方法一:在应用程序设置代码里(Program.cs)将应用程序入口改成系统主窗口,即在应用程序初始化时,第一个加载的页面为登录后的主页面. 1.在Program.cs文件中设置Application.Run:Application.Run(new FormMain());//设置应用程序运行时加载的窗口 2.添加登录按钮事件private void button1_Click(object sender, Even