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. hadoop balance均衡datanode存储不起作用问题分析

    前段时间因为hadoop集群各datanode空间使用率很不均衡,需要重新balance(主要是有后加入集群的2台机器磁盘空间比较大引起的),在执行如下语句: bin/start-balancer.s ...

  2. WIN7 64位对Excel操作异常

    在本地做Excel导出功能的测试时,报出“检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败”的异常,知道要对Excel进行D ...

  3. linux 命令——49 at (转)

    在windows系统中,windows提供了计划任务这一功能,在控制面板 -> 性能与维护 -> 任务计划, 它的功能就是安排自动运行的任务. 通过'添加任务计划'的一步步引导,则可建立一 ...

  4. oc引用计数原理-引用计数相关变化

    http://blog.csdn.net/null29/article/details/71191044 在 32 位环境下,对象的引用计数都保存在一个外部的表中,每一个对象的 Retain 操作,实 ...

  5. 【BZOJ1059】[ZJOI2007] 矩阵游戏(匈牙利算法)

    点此看题面 大致题意: 有一个\(N*N\)的\(01\)矩阵,可以任意交换若干行和若干列,问是否有方案使得左上角到右下角的连线上全是\(1\). 题意转换 首先,让我们来对题意进行一波转化. 如果我 ...

  6. 利用kvo实现列表倒计时

    自己稍微记录一下,方便以后用到: 先创建一个定时器的类: #import "TimeCenter.h" @interface TimeCenter () @property (no ...

  7. 分布式版本控制系统git

    最近看到这篇文章,简洁易懂,特摘抄至https://www.cnblogs.com/bgwhite/p/9403233.html 供大家提供参考. git可以说是世界上最先进的版本控制系统,大多语句的 ...

  8. 01_14_Struts2_结果类型_result_type

    01_14_Struts2_结果类型_result_type 1. result类型 result类型 说明 dispatcher 默认服务端转发jsp chain 服务端action转发 redir ...

  9. java算法面试题:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个, 如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”。

    package com.swift; import java.util.Scanner; public class Hanzi_jiequ { public static void main(Stri ...

  10. MySQL数据库的下载安装

    目录 一.概述 二.MySQL安装 三.安装成功验证 四.NavicatforMySQL下载及使用 一.MySQL下载 MySQL版本:5.7.17 下载地址:https://dev.mysql.co ...