uni-app如何配置在同一服务器同一账号在不同端登录

uni-app如何配置在同一服务器同一账号在不同端登录

如何配置在同一服务器同一账号在不同端登录

信息类型 信息内容
文档时间 2024-11-19 11:09
1 回复

更多关于uni-app如何配置在同一服务器同一账号在不同端登录的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在uni-app中实现同一服务器同一账号在不同端登录的管理,通常涉及用户会话管理和设备识别。下面是一个简化的代码案例,展示如何使用uni-app结合后端服务(假设使用Node.js + Express)来管理用户在不同端(如Web、App等)的登录状态。

前端(uni-app)

  1. 登录请求
// login.js
export function login(account, password, deviceType) {
    return uni.request({
        url: 'https://your-server.com/api/login',
        method: 'POST',
        data: {
            account: account,
            password: password,
            deviceType: deviceType // 例如 'web', 'app', 'mobile'
        }
    });
}
  1. 调用登录函数
// 在某个页面或组件中
uni.login({
    provider: 'your_provider', // 假设是自定义登录
    success: function (loginRes) {
        const { account, password } = loginRes; // 获取用户凭证
        login(account, password, 'app') // 假设是App端
        .then(response => {
            console.log('登录成功', response.data);
            // 存储token或用户信息
            uni.setStorageSync('token', response.data.token);
        })
        .catch(error => {
            console.error('登录失败', error);
        });
    }
});

后端(Node.js + Express)

  1. 设置用户会话管理
// server.js
const express = require('express');
const session = require('express-session');
const bodyParser = require('body-parser');

const app = express();
app.use(bodyParser.json());
app.use(session({
    secret: 'your_secret_key',
    resave: false,
    saveUninitialized: true,
    cookie: { secure: false } // 注意:生产环境应设置为true
}));

// 用户登录逻辑
app.post('/api/login', (req, res) => {
    const { account, password, deviceType } = req.body;

    // 验证账号和密码(省略)
    if (/* 验证成功 */) {
        // 检查是否已有其他设备登录
        const existingSession = req.session.devices[account];
        if (existingSession && existingSession.deviceType !== deviceType) {
            // 处理多设备登录冲突,如强制下线、提示用户等
            res.status(400).send({ message: '账号已在其他设备登录' });
        } else {
            // 更新会话
            req.session.devices = req.session.devices || {};
            req.session.devices[account] = { deviceType };
            req.session.token = 'your_generated_token'; // 生成token
            res.send({ token: req.session.token });
        }
    } else {
        res.status(401).send({ message: '账号或密码错误' });
    }
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

注意事项

  1. 安全性:在生产环境中,确保使用HTTPS来加密传输数据,并妥善管理会话密钥。
  2. 设备类型识别:可以根据需要扩展设备类型的识别,如增加版本号、平台等信息。
  3. 冲突处理:多设备登录冲突处理策略应根据具体业务需求设计,如是否允许同时登录、是否提示用户等。
回到顶部