1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > php实现微信网页授权登录界面 微信公众号 前后端分离实现网页授权登录

php实现微信网页授权登录界面 微信公众号 前后端分离实现网页授权登录

时间:2020-06-03 02:26:18

相关推荐

php实现微信网页授权登录界面 微信公众号 前后端分离实现网页授权登录

开发语言

后端:thinkphp5+easywechat3+php-jwt

前端:html

实现思路

需要授权登录页面,在页面加载完成时,判断是否登录,如果未登录访问后台授权登录链接

前端代码(主要js代码)

var domain = "/api/";

$(function () {

//判断本地是否有token,没有就获取

console.log(localStorage.getItem('token'))

if(!localStorage.getItem('token')){

getToken();

}

//获取token,用于需要鉴权的接口

function getToken(){

$.post(domain+"user/getToken",{},function (res) {

if(res.code){

console.log(res.data);

//将token存入本地缓存

localStorage.setItem('token',res.data.token);

}else{

//登录,跳转到后台登录方法,target_url传本页面地址

location.href = domain+"user/login?target_url=index.html";

}

})

}

}

后端代码(主要方法)

/**

* 获取token

*/

public function getToken()

{

if(!session('wechat_user')){

$this->error('请先登录');

}else{

//保存用户信息

$wx_user = self::saveUser();

$this->success('已登录',$wx_user);

}

}

/**

* 网页授权登录(直接访问链接)

*/

public function login()

{

$target_url = request()->param('target_url');

$target_url = "http://{$_SERVER['SERVER_NAME']}/wap/$target_url";

self::wxLogin($target_url);

}

//微信登录

static function wxLogin($target_url='')

{

$options = Config::get('wechat');

$app = new Application($options);

$oauth = $app->oauth;

// 未登录

if (empty(session('wechat_user'))) {

session('target_url',$target_url);

$oauth->redirect()->send();

}

}

//保存用户信息

static function saveUser()

{

// 已经登录过

$user = session('wechat_user');

//存入数据库

$wxUser = new WxUser();

$wx_user = $wxUser->where('openid',$user['id'])->find();

$user_data = [

'openid' => $user['id'],

'nickname' => $user['nickname'],

'avatar' => $user['avatar'],

'address' => $user['original']['province'].$user['original']['city']

];

$is_update = false;

if($wx_user){

//更新

$wxUser->where('id',$wx_user['id'])->update($user_data);

}else{

//添加

$wx_user = WxUser::create($user_data);

}

$wx_user = $wx_user->toArray();

$jwt_auth = new auth();

$token = $jwt_auth->_setJwtToken($wx_user);

$wx_user['token'] = $token;

return $wx_user;

}

//授权回调

public function oauth_callback(){

$options = Config::get('wechat');

$app = new Application($options);

$oauth = $app->oauth;

// 获取 OAuth 授权结果用户信息

$user = $oauth->user();

$user = $user->toArray();

session('wechat_user',$user);

$targetUrl = empty(session('target_url')) ? '/' : session('target_url');

header('location:'. $targetUrl);

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。