Flarum是一个开源的现代化论坛社区程序,该教程适合自己app账户系统打通Flarum账户体系实现自动登录,或者在app自动注册Flarum账户。
设置token
Flarum提供了API接口,但如果使用的话需要配置一些内容,首先安装flagrow/flarum-api-client,生成一个随机的40个字符的masterToken,之后在数据库中找到api_keys
表,将该key保存进去。
之后在每个网络请求的header
中添加Token,<masterToken>
修改为上面的随机token
Authorization: Token <masterToken>; userId=1
注册Flarum用户
接口/api/users
,请求方式POST
,请求参数
{
"data": {
"attributes": {
"username": "test",
"email": "test@gmail.com",
"password": "test123"
}
}
}
获取token
注册之后,获取用户的token
接口/api/token
,post
请求方式,请求参数
{
"identification": "Toby",
"password": "pass7word"
}
返回的内容如下
{
"token": "YACub2KLfe8mfmHPcUKtt6t2SMJOGPXnZbqhc3nX",
"userId": "1"
}
设置cookie
将用户token
保存到网页的cookies
中,参数名为flarum_remember
以iOS为例,代码如下,domain和token修改为真实的token即可
let webConfig = WKWebViewConfiguration()
//写入token自动登录
if let cookie = HTTPCookie(properties: [
.domain: "example.com",
.path: "/",
.name: "flarum_remember",
.value: token,
.secure: "TRUE",
.expires: NSDate(timeIntervalSinceNow: 31556926)
]) {
webConfig.websiteDataStore.httpCookieStore.setCookie(cookie)
}
let webVC = WKWebView.init(frame: .zero, configuration: webConfig)
webVC.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(webVC, animated: true)
这样就实现了app内跳转自动登录的效果
更新用户信息
接口/api/users/:id
,请求方式PATCH
,参数和注册一样,可以单项更新,也可以多项更新
{
"data": {
"attributes": {
"username": "test",
"email": "test@gmail.com",
"password": "test123"
}
}
}
参考文章
- using-the-api
- csrf-token-mismatch-for-register
- integrating-laravel-and-flarum
- How I implemented "Cross Authentication" with Flarum
版权属于:东哥笔记 - DongGe.me
本文链接:https://dongge.me/1188.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!
13 条评论
你好,请问如何生成masterToken,已经安装了客户端maicol07/flarum-api-client
一个随机的40个字符的masterToken,自己随便填写就行,只要不泄露,长度对就可以了
感谢的分享!!!!
好的 谢谢
请问你用的Flarum版本是多少。当我安装flagrow/flarum-api-client。提示我它的版本太低了
使用maicol07/flarum-api-client
我的flarum 是 v1.2.0 版本, 按照你的这个方式。没有实现自动登陆。是因为版本原因吗
不是版本问题,你看下cookies那里要修改成你自己真实的参数,我从1.1升级到1.2,还是有效的
通过web版抓包。发现flarum往cookies 存入的是 flarum_session
这是flarum做的操作
flarum_session=IcpNP2xul4MqLt5FySW7JmX6SydnTDuwLeYvlHV7; Path=/; Expires=Wed, 23 Feb 2022 13:41:06 GMT; Max-Age=7200; HttpOnly; SameSite=Lax
我用的都是自己真实数据, 但是你的没有问题, 那应该是我的写方式有问题. 这是我存入之后cookies的数据:
<NSHTTPCookie
version:0
name:flarum_remember
value:7GksncM0T1ehQKFOmgLfyo8M1y9iRgQap4mHZVLm
expiresDate:'2022-02-25 21:59:53 +0000'
created:'2022-02-23 09:59:53 +0000'
sessionOnly:FALSE
domain:101.---.--.--
partition:none
sameSite:none
path:/
isSecure:TRUE
path:"/" isSecure:TRUE>
通过api/token获取token时,除了传identification、password,还有一个参数"remember": "1",否则登录写cookies也是没用的,文章里忘说了
好了, 能自动登陆了, 谢谢你的回复
好的我试试