Files
x-server-mobile/backend/app/model/FeishuLoginSession.php
T
root df07b16c7a feat: 实现多端飞书登录功能
1. 飞书客户端内:静默自动登录
   - 检测飞书环境 (userAgent + ttjsBridge)
   - 调用 ttjsBridge.getAuthCode() 获取授权码
   - 自动登录到后台

2. 飞书客户端外:扫码登录
   - 后端新增三个接口:
     * POST /api/v1/auth/qrcode-login - 生成登录会话和二维码
     * GET /api/v1/auth/qrcode-login/status - 轮询登录状态
     * GET /login/qrcode/{id} - 飞书授权回调
   - 前端新增 QRCodeLogin 组件:
     * 使用 qrcode.react 生成二维码
     * 每 2 秒轮询登录状态
     * 状态:loading → pending → scanning → success/expired

3. 数据库表:feishu_login_session
   - 存储 session_id, auth_url, status, user_id
   - 状态:pending, scanning, success, expired
   - 2 分钟过期机制

4. 其他优化
   - 移除审批详情页的 header
   - 更新 PROJECT_ISSUES.md 文档

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 09:58:19 +08:00

49 lines
1.0 KiB
PHP

<?php
namespace app\model;
use support\Model;
class FeishuLoginSession extends Model
{
protected $table = 'feishu_login_session';
protected $fillable = [
'company_id',
'tenant_key',
'status',
'user_id',
'expires_at',
];
protected $casts = [
'status' => 'string',
'user_id' => 'integer',
'company_id' => 'integer',
'expires_at' => 'datetime',
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
const STATUS_PENDING = 'pending'; // 待扫码
const STATUS_SCANNING = 'scanning'; // 已扫码,待授权
const STATUS_SUCCESS = 'success'; // 登录成功
const STATUS_EXPIRED = 'expired'; // 已过期
/**
* 关联公司
*/
public function company()
{
return $this->belongsTo(Company::class, 'company_id');
}
/**
* 关联用户
*/
public function user()
{
return $this->belongsTo(User::class, 'user_id');
}
}