weapp-cookie
Одна строка кода позволяет апплету WeChat, Toutiao, Baidu, Alipay поддерживать файлы cookie, портал:github
Intro
Собственный интерфейс сетевого запроса апплета не поддерживает традиционные файлы cookie, но иногда наш существующий внутренний интерфейс действительно зависит от файлов cookie (например, статус входа пользователя на сервер).Эта библиотека может реализовать механизм файлов cookie для вашего апплета с помощью одной строки code , чтобы гарантировать, что сеанс службы на основе файлов cookie не завершится сбоем, и поделиться механизмом сеанса с веб-стороной.
Featrues
- Одна строка кода, чтобы апплет поддерживал файлы cookie.
- Вы можете использовать API для получения и установки файлов cookie.
- Поддержка области домена/пути
Install
npm install weapp-cookie --save
# 将 npm 包复制到 vendor 文件夹,避免小程序可能不能找到文件(tips:使用 wepy/mpvue 等框架无需此步)
cp -rf ./node_modules/ ./vendor/
Usage
Взяв в качестве примера апплет WeChat, его можно импортировать в строку кода app.js в корневом каталоге апплета.
// app.js
import './vendor/weapp-cookie/index'
// tips: 使用 wepy/mpvue 可以直接在入口 js 引入 weapp-cookie 模块
// import 'weapp-cookie'
App({
onLaunch: function () { }
// ...
})
Исходный метод вызова wx.request остается без изменений.После введения weapp-cookie будет автоматически проксировать доступ к интерфейсу wx.request на нижнем уровне для поддержки хранения и отправки файлов cookie.
// pages/home/index.js
Page({
onLoad: function () {
wx.request({
url: 'https://example.com/login',
data: {
username: 'admin',
password: '123456'
},
success: function (res) {
/*
* 接口调用成功后 weapp-cookie 会自动保存后端发送的所有Cookie(比如:SessionID)
* 并在后续的所有请求中带上,以保证基于 cookie 的服务器会话机制不会失效,
* 实现与 web 端共用会话机制(无需再手动维护 3rd_session_key)
*/
}
})
}
})
операции с файлами cookie можно вызывать через API
import cookies from 'weapp-cookie'
// 获取 cookie
let token = cookies.get('csrf_token', 'example.com')
// 设置 cookie
let cookie = cookies.set('uid', 100, { domain: 'example.com' })
// 删除 cookie
let isRemoved = cookies.remove('uid', 'example.com')
// 判断是否存在 cookie
let hasToken = cookies.has('uid', 'example.com')
// ... 详情请参考 Api
Использование и настройка псевдонимов: благодаря механизму безопасности программ WeChat Mini,wx.request не может быть перезаписан в среде плагина апплета, поэтому вам нужно использовать встроенные псевдонимы или пользовательские псевдонимы для поддержки запросов файлов cookie.
import cookies from 'weapp-cookie'
// 使用内置别名
wx.requestWithCookie({
url: 'https://example.com/user/current',
success: function (res) {
console.log(res)
}
})
// 配置自定义别名
cookies.config({ requestAlias: 'requestx' })
// 使用自定义别名
wx.requestx({
url: 'https://example.com/user/current',
success: function (res) {
console.log(res)
}
})
Api
CookieStore
import cookies from 'weapp-cookie'
/**
* 获取 cookie 值
* @param {String} name cookie 名称
* @param {String} [domain] 指定域名(可选)
* @return {String} cookie 值
*/
cookies.get(String name, String domain)
/**
* 设置 cookie
* @param {String} name cookie 名称
* @param {String} value cookie 值
* @param {Object} options cookie 选项
* @param {String} options.domain 设置域名
* @param {String} [options.path]
* @param {Date} [options.expires]
* @param {Number} [options.maxAge]
* @param {Boolean} [options.httpOnly]
* @return {Cookie} cookie 对象
*/
cookies.set(String name, String value, Object options)
/**
* 是否存在某个 cookie
* @param {String} name cookie 名称
* @param {String} [domain] 指定域名(可选,不指定则任意域名包含名称为 name 的 cokkie 即为存在)
* @return {Boolean} 是否存在
*/
cookies.has(String name, String domain)
/**
* 删除 cookie
* @param {Array} name cookie 键
* @param {String} [domain] 指定域名(可选,不指定则删除所有域名中名称为 name 的 cookie)
* @return {Boolean} 是否删除成功
*/
cookies.remove(String name, String domain)
/**
* 获取 cookie 对象
* @param {String} name cookie 名称
* @param {String} [domain] 指定域名(可选)
* @return {Cookie} cookie 对象
*/
cookies.getCookie(String name, String domain)
/**
* 获取 cookies JSON对象
* @param {String} [domain] 指定域名(可选,不指定则获取包含所有域名的 cookie 值对象)
* @return {Object} cookie JSON对象
*/
cookies.getCookies(String domain)
/**
* 清除 cookie
* @param {String} [domain] 指定域名(可选,不指定则清除所有域名 cookie)
* @return {Boolean} 是否清除成功
*/
cookies.clearCookies (domain)
/**
* 获取所有存储的域名和 cookies 结构
* @return {Object} obj 结构JSON对象
*/
cookies.dir(domain)
Cookie
import cookies from 'weapp-cookie'
// 获取 cookie 对象
let cookie = cookies.getCookie('uuid', 'example.com')
// ===== cookie 属性 =====
cookie.name: String
cookie.value: String
cookie.domain: String
cookie.path: String
cookie.expires: Date
cookie.maxAge: Number
cookie.httpOnly: Boolean
// ===== cookie 方法 =====
/**
* 验证 cookie 是否过期
* @return {Boolean} 是否过期
*/
cookie.isExpired()
/**
* 验证 cookie 是否可持久化
* @return {Boolean} 是否可持久化
*/
cookie.isPersistence()
Если вам это было полезно, добро пожаловать в звездочку ^_^