文档章节

微信小程序开发记账应用实战服务端之用户注册与登录-基于Yii2描述

秀杰
 秀杰
发布于 2016/10/05 22:41
字数 865
阅读 1226
收藏 1
点赞 0
评论 0

框架下载地址:http://www.yiiframework.com/download/

选择advanced版本

初始化:项目目录给予读写权限后,打开命令行控制台,切换到项目目录,命令行执行

php init

将自动创建一系列文件:


Yii Application Initialization Tool v1.0

Which environment do you want the application to be initialized in?

  [0] Development
  [1] Production

  Your choice [0-1, or "q" to quit] 0

  Initialize the application under 'Development' environment? [yes|no] yes

  Start initialization ...

   generate backend/config/main-local.php
   generate backend/config/params-local.php
   generate backend/web/index-test.php
   generate backend/web/index.php
   generate common/config/main-local.php
   generate common/config/params-local.php
   generate console/config/main-local.php
   generate console/config/params-local.php
   generate frontend/config/main-local.php
   generate frontend/config/params-local.php
   generate frontend/web/index-test.php
   generate frontend/web/index.php
   generate tests/codeception/config/config-local.php
   generate yii
   generate cookie validation key in backend/config/main-local.php
   generate cookie validation key in frontend/config/main-local.php
      chmod 0777 backend/runtime
      chmod 0777 backend/web/assets
      chmod 0777 frontend/runtime
      chmod 0777 frontend/web/assets
      chmod 0755 yii
      chmod 0755 tests/codeception/bin/yii

  ... initialization completed.

配置数据库连接

<?php
return [
    'components' => [
        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=yii2advanced',
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
        ]
    ],
];

迁移数据

php yii migrate

将为我们创建好User表

Yii Migration Tool (based on Yii v2.0.9)

Creating migration history table "migration"...Done.
Total 1 new migration to be applied:
	m130524_201442_init

Apply the above migration? (yes|no) [no]:yes
*** applying m130524_201442_init
    > create table {{%user}} ... done (time: 0.683s)
*** applied m130524_201442_init (time: 0.811s)


1 migration was applied.

Migrated up successfully.

为User表增加一个openid字段

ALTER TABLE  `user` ADD  `openid` VARCHAR( 255 ) NOT NULL AFTER  `updated_at`

将字段username auth_key password_hash email设置为allow null

创建分类Category、收支Item

http://localhost/finance-web/backend/web/index.php?r=gii

流程:如果用户是首次登录,则为user表插入一条数据,并返回该用户;如果是老用户,并查询到此用户返回。微信小程序将包括用户id等信息缓存到localStorage

创建WechatLogin模型

增加openid的登录方式findByOpenid()方法

创建APIController基类,用于json格式化输出

<?php
namespace frontend\controllers;

use yii\web\Controller;
use Yii;
use yii\web\Response;

class APIController extends Controller
{
    //json方法
    public function json($data, $code = 1001, $msg = '加载成功') {
    	Yii::$app->response->format = Response::FORMAT_JSON;
    	echo \yii\helpers\Json::encode(['code' => $code, 'msg' => $msg, 'data' => $data]);
    }
}

创建UserController,用于登录

<?php
namespace frontend\controllers;

use Yii;
use yii\web\Controller;
use common\models\WechatLogin;

class UserController extends APIController
{
// 	允许外部提交
	public $enableCsrfValidation = false;
    /**
     * Logs in a user.
     *
     * @return mixed
     */
    public function actionLogin()
    {

        $model = new WechatLogin();
        if ($model->load(Yii::$app->request->post()) && $model->login()) {
        	$this->json(\yii\helpers\ArrayHelper::toArray($model->login()), 1000, '登录成功');
        } else {
        	$this->json([], 404, '登录失败');
        }
    }
}

创建微信登录Model

<?php
namespace common\models;

use Yii;
use yii\base\Model;
class WechatLogin extends Model {
	public $openid;
	public $rememberMe = true;
	private $_user;
	
	/**
	 * @inheritdoc
	 */
	public function rules()
	{
		return [
			['openid', 'safe'],
			['rememberMe', 'boolean'],
		];
	}
	
	public function login()
	{
		if ($this->validate()) {
			Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0);
			return $this->getUser();
		} else {
			return false;
		}
	}
	
	/**
	 * Finds user by [[username]]
	 *
	 * @return User|null
	 */
	protected function getUser()
	{
		if ($this->_user === null) {
			$this->_user = $this->findByOpenid($this->openid);
		}
		return $this->_user;
	}
	
	/**
	 * 增加openid登录的方式
	 */
	
	public function findByOpenid($openid) {
		$user = User::findOne(['openid' => $openid]);
		if ($user) {
			//     		如果已经用户存在
			return $user;
		} else {
			$model = new User();
			$model->openid = $openid;
			$time = time();
			$model->created_at = $time;
			$model->created_at = $time;
			$model->status = User::STATUS_ACTIVE;
			if ($model->save()) {
				return $model;
			}
			//     		创建这个用户并返回
				
		}
	}
}

到此,完成用户登录。

使用Postman测试一下。

url:localhost/finance-web/frontend/web/index.php?r=user/login

param:WechatLogin[openid] = 黄秀杰

response:{"code":1000,"msg":"登录成功","data":{"openid":"黄秀杰","created_at":1475654180,"status":10,"updated_at":1475654180,"id":4}}

实际操作中,发现没有appId,则不能拿到res.code,于是就解析不了openid,所以在微信开放公测之前,姑且拿nickname作为openid使用。

未完待续...

谢谢阅读,希望本文对你有帮助,有问题可以在公众号给我留言交流,订阅号:huangxiujie85

© 著作权归作者所有

共有 人打赏支持
秀杰
粉丝 139
博文 84
码字总数 49285
作品 0
瑞安
iOS工程师
yii2 restful 风格搭建(二)接口认证

做完了基本的 restful 搭建,就需要接口认证和定义返回码了 一、yii2 支持的 3种认证方式 1、HTTP 基本认证: yiifiltersauthHttpBasicAuth 支持两种认证方式,输入用户名和密码和只输入用户名...

botkenni ⋅ 05/03 ⋅ 0

"口令红包"-利用函数计算构建微信小程序的server端

前言 函数计算 阿里云函数计算是一个事件驱动的全托管计算服务。通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。函数计算会为您准备好计算资源,以弹性、可靠的方式运行您的...

rsong ⋅ 02/06 ⋅ 0

移动开发之微信小程序——资料集合

本文转载自:知乎 有需要下载的客官可可以点击知乎去下载相关资料 一:官方地址集合: 1:官方工具:https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html?t=1476434678461 2:...

DJY1992 ⋅ 2016/12/21 ⋅ 0

【翻译】Yii2 第1章 开始

让我们看看,怎样以最小的代价使用Yii2创建一个站点。目的是学习使用Yii2应用模版的安装过程,并开始体验模版里提供的一系列特性。 一个基本应用 开始使用Yii2最基本和直接的方式,是使用Yii...

zcgly ⋅ 2015/09/15 ⋅ 7

yii2项目实战-用户管理之user组件的配置

作者:白狼 出处:http://www.manks.top/document/yii2-user-config.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律...

白狼栈 ⋅ 2016/08/22 ⋅ 0

2018最新-9小时搞定微信小程序开发

2018最新-9小时搞定微信小程序开发 网盘地址:https://pan.baidu.com/s/1N6IGuXgF3YrVvmCNi1T--Q 密码:f8pq 备用地址(腾讯微云):https://share.weiyun.com/5rrdDMP 密码:ap7b9q 本课程为...

人气王子333 ⋅ 05/10 ⋅ 0

从零开始学做微信小程序,看这些就够了!

随着正式开放公测,微信小程序再次万众瞩目,越来越多的企业和个人涌入到小程序开发的大军中。小程序究竟是什么?适合做小程序的产品有哪些?做小程序需要提前准备什么?如何零基础学做小程序...

王练 ⋅ 2016/11/09 ⋅ 22

微信小程序的入口、核心逻辑及小程序与APP之间的博弈

  什么是微信小程序   内置于微信的云端应用程序,不需要安装、下载,用完即走。与微信订阅号、服务号和企业号属于同等级。小程序、订阅号、服务号、企业号行程了并行的微信生态四大体系...

ThinkSNS账号 ⋅ 05/14 ⋅ 0

yii2搭建完美后台并实现rbac权限控制

作者:白狼 出处:http://www.manks.top/article/yii2framerbac_template 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律...

白狼栈 ⋅ 2016/03/30 ⋅ 2

Yii2如何实现用户登陆

这两天空的时候,看了下Yii2,然后按照官方教程,安装了Yii2基础版。最开始的问题,无非就是注册登陆等功能了,果然,Yii2基础版并不像高级版一样,可以直接导入创建好的数据库,只有的静态登...

卖小女孩的小火柴 ⋅ 2015/04/11 ⋅ 5

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring | IOC AOP 注解 简单使用

写在前面的话 很久没更新笔记了,有人会抱怨:小冯啊,你是不是在偷懒啊,没有学习了。老哥,真的冤枉:我觉得我自己很菜,还在努力学习呢,正在学习Vue.js做管理系统呢。即便这样,我还是不...

Wenyi_Feng ⋅ 今天 ⋅ 0

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 今天 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

Dockerfile基础命令总结

FROM 指定使用的基础base image FROM scratch # 制作base image ,不使用任何基础imageFROM centos # 使用base imageFROM ubuntu:14.04 尽量使用官方的base image,为了安全 LABEL 描述作...

ExtreU ⋅ 昨天 ⋅ 0

存储,对比私有云和公有云的不同

导读 说起公共存储,很难不与后网络公司时代的选择性外包联系起来,但尽管如此,它还是具备着简单和固有的可用性。公共存储的名字听起来也缺乏专有性,很像是把东西直接堆放在那里而不会得到...

问题终结者 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部