文档章节

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

秀杰
 秀杰
发布于 2016/10/05 22:41
字数 865
阅读 1306
收藏 1

框架下载地址: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

© 著作权归作者所有

共有 人打赏支持
秀杰
粉丝 149
博文 94
码字总数 50956
作品 0
瑞安
iOS工程师
私信 提问
这周撸了两款小程序,分享下关键点。

本周撸了两款小程序,在这里总结下开发过程中的小经验,希望对大家有用。 小程序端 我们先说小程序要注意的地方。 默认入口转发问题 当一个小程序Page的js文件中存在 onShareAppMessage 方法...

阿北2017
10/22
0
0
2018年慕课网视频教程(vue、docker、python、Go语言、java......)

如需下述哪一个课程,加QQ: 3475362830,非免费,几大洋,非诚勿扰! Java并发编程与高并发解决方案 ZooKeeper分布式专题与Dubbo微服务入门 Java大数据实战 Stom构建实时流处理 HBase+Spring...

杰梵
10/08
0
0
laravel5实现微信第三方登录功能

背景 最近手头一个项目需要实现用户在网站的第三方登录(微信和微博),后端框架laravel5.4。 实现过程以微信网页版第三方登录,其他于此类似,在此不做重复。 准备工作 网站应用微信登录是基于...

开元中国2015
12/07
0
0
微信小程序开放公测,企业、政府及媒体可申请

11 月 3 日晚间,微信团队对外宣布,微信小程序开放公测,开发者可登陆微信公众平台申请,开发完成后可以提交审核,公测期间暂不能发布。 根据微信团队的介绍,开放注册范围为企业、政府、媒...

局长
2016/11/03
3.5K
15
SAP成都研究院大卫哥:SAP C4C中国本地化之微信小程序集成

今天的文章来自Wu David,SAP成都研究院C4C开发团队的架构师,在加入团队之前曾经在SAP上海研究院工作,组内同事习惯亲切地称呼他为大卫哥。 大卫哥身高据Jerry目测有1米8以上,是成都C4C开发...

JerryWang_SAP
11/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

玩转docker-构建镜像

构建镜像 直接进入主题,docker的构建有两种方式,一种是通过commit命令的方式,一种是通过 Dockerfile 构建文件的方式构建,分析一下这两种方式用法,以拿构建centos为例吧,打算将本地仓库的cen...

yaukie
5分钟前
0
0
koa源码中的promise的解析

koa 是一个非常轻量优雅的 node 应用开发框架,趁着闲余时间阅读了下源代码,其中一些比较有意思的地方整理成文与大家分享一下。 洋葱型中间件机制的实现原理 我们经常把 koa 中间件的执行机...

peakedness丶
7分钟前
0
0
Html5 Canvas动画基础碰撞检测的实现

在Canvas中进行碰撞检测,大家往往直接采用游戏引擎(Cocos2d-JS、Egret)或物理引擎(Box2D)内置的碰撞检测功能,好奇的你有思考过它们的内部运行机制吗?下面将针对基本的碰撞检测技术进行讲解...

嫣然丫丫丫
10分钟前
0
0
阿里云物联网平台体验(树莓派+Python篇)

阿里云物联网平台体验(树莓派+Python篇) 虽然对阿里云物联网平台比较熟悉了,从一开始就有幸参与了飞凤平台(Link Develop 一站式开发平台的前身)的一些偏硬件接入的工作。但是同时也见证了...

阿里云官方博客
15分钟前
1
0
Java Sound Programmer Guide

Introductory Material Preface For Whom This Guide Is Intended What this Guide Describes For More Information Chapter: 1 Introduction to the Java Sound API Design Goals Who is th......

祖冲之
18分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部