Controer:

<?php
/**
* @name UserController
* @author pangee
* @desc 用户控制器
*/
class UserController extends Yaf_Controller_Abstract { public function indexAction() {
return $this->loginAction();
}
public function loginAction() {
$submit = $this->getRequest()->getQuery( "submit", "0" );
if( $submit!="1" ) {
echo json_encode( array("errno"=>-1001, "errmsg"=>"请通过正确渠道提交") );
return FALSE;
} // 获取参数
$uname = $this->getRequest()->getPost( "uname", false );
$pwd = $this->getRequest()->getPost( "pwd", false );
if( !$uname || !$pwd ) {
echo json_encode( array("errno"=>-1002, "errmsg"=>"用户名与密码必须传递") );
return FALSE;
} // 调用Model,做登录验证
$model = new UserModel();
$uid = $model->login( trim($uname), trim($pwd) );
if ( $uid ) {
// 种Session
session_start();
$_SESSION['user_token'] = md5( "salt".$_SERVER['REQUEST_TIME'].$uid );
$_SESSION['user_token_time'] = $_SERVER['REQUEST_TIME'];
$_SESSION['user_id'] = $uid;
echo json_encode( array(
"errno"=>0,
"errmsg"=>"",
"data"=>array("name"=>$uname)
));
} else {
echo json_encode( array(
"errno"=>$model->errno,
"errmsg"=>$model->errmsg,
));
}
return TRUE;
}
public function registerAction() {
// 获取参数
$uname = $this->getRequest()->getPost( "uname", false );
$pwd = $this->getRequest()->getPost( "pwd", false );
if( !$uname || !$pwd ) {
echo json_encode( array("errno"=>-1002, "errmsg"=>"用户名与密码必须传递") );
return FALSE;
} // 调用Model,做登录验证
$model = new UserModel();
if ( $model->register( trim($uname), trim($pwd) ) ) {
echo json_encode( array(
"errno"=>0,
"errmsg"=>"",
"data"=>array("name"=>$uname)
));
} else {
echo json_encode( array(
"errno"=>$model->errno,
"errmsg"=>$model->errmsg,
));
}
return TRUE;
}
}

  

Model:

<?php
/**
* @name UserModel
* @desc 用户操作Model类
* @author pangee
*/
class UserModel {
public $errno = 0;
public $errmsg = "";
private $_db; public function __construct() {
$this->_db = new PDO("mysql:host=127.0.0.1;dbname=imooc;", "root", "");
} public function login( $uname, $pwd ) {
$query = $this->_db->prepare("select `pwd`,`id` from `user` where `name`= ? ");
$query->execute( array($uname) );
$ret = $query->fetchAll();
if ( !$ret || count($ret)!=1 ) {
$this->errno = -1003;
$this->errmsg = "用户查找失败";
return false;
}
$userInfo = $ret[0];
if( $this->_password_generate($pwd) != $userInfo['pwd'] ) {
$this->errno = -1004;
$this->errmsg = "密码错误";
return false;
}
return intval($userInfo[1]);
} public function register( $uname, $pwd ){
$query = $this->_db->prepare("select count(*) as c from `user` where `name`= ? ");
$query->execute( array($uname) );
$count = $query->fetchAll();
if( $count[0]['c']!=0 ) {
$this->errno = -1005;
$this->errmsg = "用户名已存在";
return false;
} if( strlen($pwd)<8 ) {
$this->errno = -1006;
$this->errmsg = "密码太短,请设置至少8位的密码";
return false;
} else {
$password = $this->_password_generate( $pwd );
} $query = $this->_db->prepare("insert into `user` (`id`, `name`,`pwd`,`reg_time`) VALUES ( null, ?, ?, ? )");
$ret = $query->execute( array($uname, $password, date("Y-m-d H:i:s")) );
if( !$ret ) {
$this->errno = -1006;
$this->errmsg = "注册失败,写入数据失败";
return false;
}
return true;
} private function _password_generate( $password ){
$pwd = md5( "salt-xxxxxxxxx-".$password );
return $pwd;
} }

  

用户注册,登录API 接口的更多相关文章

  1. day102:MoFang:后端完成对短信验证码的校验&基于celery完成异步短信发送&flask_jwt_extended&用户登录的API接口

    目录 1.用户注册 1.后端完成对短信验证码的校验 2.基于celery实现短信异步发送 2.用户登录 1.jwt登录验证:flask_jwt_extended 2.服务端提供用户登录的API接口 1 ...

  2. php 登录注册api接口代码

    /** *一览(www.yl1001.com) * PHP开发API接口 服务端 */ require 'conn.php'; //连接数据库的文件 header('Content-Type:text ...

  3. Web API接口 安全验证

    在上篇随笔<Web API应用架构设计分析(1)>,我对Web API的各种应用架构进行了概括性的分析和设计,Web API 是一种应用接口框架,它能够构建HTTP服务以支撑更广泛的客户端 ...

  4. 免费安卓IOS测试API接口,后续会陆续增加接口

    各位博友好!开发的安卓或者ios的朋友们,经常会遇到想测试但是没有公开的api接口进行进行测试.但自己又不会开发服务端或者没有服务器,这里我免费提供了一整套API接口.欢迎大家调用,目标是方便大家. ...

  5. 构建微服务-使用OAuth 2.0保护API接口

    微服务操作模型 基于Spring Cloud和Netflix OSS 构建微服务-Part 1 基于Spring Cloud和Netflix OSS构建微服务,Part 2 在本文中,我们将使用OAu ...

  6. [转]使用nodejs-koa2-mysql-sequelize-jwt 实现项目api接口

    本文转自:https://blog.csdn.net/yibowanbo/article/details/80521849 nodejs-koa2-mysql-sequelize-jwt技术栈:nod ...

  7. 设计一个高质量的API接口

    参考网址:http://url.cn/5UaTeyv 前言 在设计接口时,有很多因素要考虑,如接口的业务定位,接口的安全性,接口的可扩展性.接口的稳定性.接口的跨域性.接口的协议规则.接口的路径规则. ...

  8. “小葵日记”API接口文档

    "小葵日记"项目API接口文档 时间:2017/10/31 (1)用户登录[待完成] POST:127.0.0.1/index/user/login data 数据别称 数据名 数 ...

  9. 使用nodejs-koa2-mysql-sequelize-jwt 实现项目api接口

    nodejs-koa2-mysql-sequelize-jwt 技术栈:nodejs, koa2, mysql, sequelize, jwt 项目数据层和操作层分明 使用koa2框架中间件,参数处理 ...

随机推荐

  1. Altera FFT核使用详解

    简介 快速傅里叶变换(Fast Fourier Transform)最为一种高效的算法,被广泛的用于信号处理与数据分析等领域.对于设计工程师来讲,自己动手采样可编程语言来实现一个FFT/IFFT模块, ...

  2. Redis安装配置及在Python上的应用

    最近在使用Kazoo(开源电话系统) API时,一次请求的处理需要调用几次API,只为了得到一个name和id的对应关系,耗时非常大,开始想使用一种简单的实现,直接将对应关系保存到静态类的静态变量中, ...

  3. IOS 旋转+缩放(手势识别)

    @interface NJViewController ()<UIGestureRecognizerDelegate> @property (weak, nonatomic) IBOutl ...

  4. hdu-2256 Problem of Precision---矩阵快速幂+数学技巧

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2256 题目大意: 题目要求的是(sqrt(2)+sqrt(3))^2n %1024向下取整的值 解题 ...

  5. C++中的异常安全性

    http://blog.csdn.net/bonchoix/article/details/8046727 一个函数如果说是“异常安全”的,必须同时满足以下两个条件:1.不泄漏任何资源:2.不允许破坏 ...

  6. 【51nod1443】路径和树(堆优化dijkstra乱搞)

    点此看题面 大致题意:给你一个无向联通图,要求你求出这张图中从u开始的权值和最小的最短路径树的权值之和. 什么是最短路径树? 从\(u\)开始到任意点的最短路径与在原图中相比不变. 题解 既然要求最短 ...

  7. 复习C++_指针、动态分配内存

    注意:++i指的是先计算i+1,然后将其赋给i cout<<str[7]<<endl; //输出a 注:交换失败 注意:delete释放之后,变为迷途指针. 注:n--> ...

  8. 快速排序算法思路分析和C++源代码(递归和非递归)

    快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试喜欢考这个. 快速排序是C.R.A.Hoar ...

  9. icon踩坑记录

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. MySQL表碎片整理

    MySQL表碎片整理 1. 计算碎片大小 2. 整理碎片 2.1 使用alter table table_name engine = innodb命令进行整理. 2.2 使用pt-online-sch ...