用户注销user_session立即失效
默认的用户登录后user_session的失效时间是8个小时,如果要立即失效需要通过redis记录状态
一. 租户管理员登录控制台,在应用/服务管理中找到门户应用,点击更多,找到定制管理打开开启定制
二. 开启定制成功后切换到架构,从市场中选择redis模版组件
三. 把redis组件拖放到架构中,服务名填写redis,点确定,然后点ide的保存,进行ide重启
四. ide重启后,切换到代码在model/service/main/deplay下的dev.def.xml和production.def.xml文件中添加redis组件的属性配置和引用
属性配置如下:
<property value="1000" name="redis_timeout" env="AUTHENTICATION_REDIS_TIMEOUT">
<label label="redis_timeout"/>
</property>
<property value="${redis.redisServiceAddress}" name="redis_host" env="AUTHENTICATION_REDIS_HOST">
<label label="redis_host"/>
</property>
<property value="${redis.redisAuth}" name="redis_password" env="AUTHENTICATION_REDIS_PASSWORD">
<label label="redis_password"/>
</property
引用如下:
<use name="redis" optional="true" instance="comp.redis"/>
完整的配置如图:
五. 保存文件,发布运行时,发布成功后就有了状态,注销的时候user_session就会立即失效,而且也可以从后端调用注销
需要注意的是这样配置后默认一个账户只能在一个地方登录,后登录的会踢掉前面登录的账户,如果要设置一个账户可以同时登录多台设备,可以通过配置authentication插件中login和logout两个api的session_account_mode_redis参数值实现 这个参数的值有三个选择,默认是replace
replace: 后登录的是踢掉前面登录的账户,开启redis后默认为replace模式
refuse: 后登录的账户禁止登录,必须注销前面登录的账户
multiply: 支持一个账户登录多台设备
如图配置如下:
- 打开门户的ide切换到代码,在model/service/main下创建一个目录,目录名可以自己定义,如redislogout;在创建的目录下创建一个app.m文件
- 在创建的app.m中重写authentication插件中login和logut两个api的参数,重写的时候需要注意默认的参数也要添加上,默认的参数可以在model/service/comp/entryinit/login和model/service/comp/entryinit/logout目录下的app.m中看authentication插件中的定义,如下是login中默认的
app.m中重写如下,order是设置优先级:
- 再加上需要的session_account_mode_redis参数配置,如下:
<?xml version="1.0" encoding="UTF-8" ?>
<service order="999" target="kong2">
<plugin name="authentication" enabled="true" api_name="login">
<app_key>{{.Env.API_KEY}}</app_key>
<app_secret>{{.Env.API_SECRET}}</app_secret>
<redis_timeout>{{.Env.AUTHENTICATION_REDIS_TIMEOUT}}</redis_timeout>
<redis_host>{{.Env.AUTHENTICATION_REDIS_HOST}}</redis_host>
<redis_port>{{.Env.AUTHENTICATION_REDIS_PORT}}</redis_port>
<redis_password>{{.Env.AUTHENTICATION_REDIS_PASSWORD}}</redis_password>
<session_account_mode_redis>multiply</session_account_mode_redis>
</plugin>
<plugin name="authentication" enabled="true" api_name="logout">
<app_key>{{.Env.API_KEY}}</app_key>
<app_secret>{{.Env.API_SECRET}}</app_secret>
<admin_users>system</admin_users>
<silent_mode>true</silent_mode>
<redis_timeout>{{.Env.AUTHENTICATION_REDIS_TIMEOUT}}</redis_timeout>
<redis_host>{{.Env.AUTHENTICATION_REDIS_HOST}}</redis_host>
<redis_port>{{.Env.AUTHENTICATION_REDIS_PORT}}</redis_port>
<redis_password>{{.Env.AUTHENTICATION_REDIS_PASSWORD}}</redis_password>
<session_account_mode_redis>multiply</session_account_mode_redis>
</plugin>
</service>
- 保存文件,发布运行时即可