用户注销 user_session 立即失效

用户登录后 user_session 的失效时间,默认是12个小时,如果要立即失效,需要通过 redis 记录状态

定制企业门户

参考《门户定制》文档,定制企业门户,打开企业门户 IDE

添加 redis

在企业门户 IDE 中,切换到架构,从市场中选择 redis 模版组件

图 1

把 redis 组件拖放到架构中,服务名填写 redis,点确定,然后点 IDE 的保存,进行 IDE 重启

图 2

IDE 重启后,切换到代码,在“门户自定义”组件服务端目录 model/service/comp/portalConfig/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"/>

完整的配置,如下图所示

1719900135220

保存文件,重新发布门户,发布成功后就有了状态,注销的时候 user_session 就会立即失效,而且也可以从后端调用注销

特别说明

  • 由于架构新增了 redis 模板组件,需要 redis 资源支持,因此在门户发布完成后进入重启状态前,请先保证有可分配的 redis 资源

配置一个账户可登录多台设备

经过上面的配置,一个账户只能在一个地方登录,后登录的会踢掉前面登录的账户,如果要设置一个账户可以同时登录多台设备,可以通过配置 authentication 插件中 login 和 logout 两个 api 的 session_account_mode_redis 参数值实现

这个参数的值有三个选择,默认是 replace

  • replace:后登录的踢掉前面登录的账户,开启 redis 后默认为 replace 模式
  • refuse:后登录的账户禁止登录,必须注销前面登录的账户
  • multiply:支持一个账户登录多台设备

配置过程如下:

打开门户的 IDE,切换到代码页,在“门户自定义”组件服务端目录 model/service/comp/portalConfig 下新建一个目录 plugins,用于存放插件配置文件。在 model/service/comp/portalConfig/plugins 目录下创建一个目录,目录名可以自己定义,如 redislogin。在创建的目录下,创建一个 app.m 文件

在创建的 app.m 中重写 authentication 插件中 login 和 logut 两个 api 的参数,重写的时候,需要注意默认的参数也要添加上,默认的参数定义在 model/service/comp/entryinit/login 和 model/service/comp/entryinit/logout 目录下的 app.m 文件中的 authentication 插件中,如下图所示是 login 中的默认参数

图 6

app.m 中重写 authentication 插件中 login 和 logut 两个 api 的参数,使用默认参数,再加上需要的 session_account_mode_redis 参数,代码如下

{% raw %} 
<?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>
{% endraw %}

完整的配置,如下图所示,其中 order 是设置优先级

1719900652384

保存文件,重新发布门户即可

results matching ""

    No results matching ""