Phpbb Auth Plugin
这几天我们这里需要搞一个论坛,我搜了一些,选了 phpbb,这个毕竟年头比较久远,也支持 PostgreSQL。
我们自己本身有自己的会员逻辑,所以就需要把他的登陆和我们自己的结合,而 phpbb 也支持自己作 Auth Plugin。
涉及到的文件有几个
- includes/auth/auth_foo.php:这个是具体的 auth 逻辑代码的地方。
- config/default/container/services_auth.yml:这个是注册这个 auth 逻辑的地方。
- template 模板文件:这个我没涉及到,所以没去了解。
service 文件的配置:
auth.provider.skyreq:
class: phpbb\auth\provider\foo
arguments:
- '@dbal.conn'
- '@config'
- '@passwords.manager'
- '@request'
- '@user'
- '@service_container'
- '%core.root_path%'
- '%core.php_ext%'
tags:
- { name: auth.provider }
上面配置里面 arguments 指定的,是 auth_foo.php 的 constructor 接受的参数。可以需要什么配置什么,个数要对应。
配置这个之后,只需要在 auth_foo.php
里面实现具体的逻辑就可以了。
init_method
这个方法是在后台用户选中这个 auth 方法的时候执行的,比如你如果有一些配置的话就可以在这里验证。如果需要用户录入配置的话,还需要配合 template 文件,好提供录入的界面。我这里没有这个需求。
login_method
这个方法是在用户登陆的时候会调用。会传入用户名和密码两个参数。实现逻辑可以参考 auth_db 这个模块。phpbb 为了安全,对于管理员用户会有一个二次验证的过程,管理员的 session 过期时间也会短一些。所以我们必须要实现这个,否则一个管理员就无法访问后台了。我这里是完全复制的 auth_db 的逻辑,里面改动了一点增加了一个硬编码只允许几个我指定的用户登陆。然后验证也完全用的 phpbb 的密码逻辑。
autologin_method
这个方法是在用户 session 创建的时候通过外部逻辑实现验证的时候调用。自己实现认证主要是在这里实现。我的需求是通过 cookie 验证,如果用户不存在,会直接新建一个用户,如果已经存在,会直接用那个用户登陆。这样一个用户在我的系统的其它页面登陆之后,访问 phpbb 就会自动登陆了。
logout_method
登出的逻辑。我这没有需求,不希望用户从论坛登出。所以留空就可以了。
validate_session_method
session 验证逻辑,这个是验证一个用户的 session 是否有效。如果无效会触发自动登陆。