|
@@ -9,6 +9,7 @@ import BaseModel from "../../common/base/base_model";
|
|
|
import LogType from "../../common/const/log_type_const";
|
|
|
import LogSchema from "./schema/log";
|
|
|
import UAParser from "ua-parser-js";
|
|
|
+import Request from "request";
|
|
|
|
|
|
class LogModel extends BaseModel {
|
|
|
|
|
@@ -57,11 +58,13 @@ class LogModel extends BaseModel {
|
|
|
* @param {Object} request
|
|
|
* @return {Promise}
|
|
|
*/
|
|
|
- addLoginLog(userId, request) {
|
|
|
+ async addLoginLog(userId, request) {
|
|
|
let ip = request.connection.remoteAddress;
|
|
|
ip = ip.split(':');
|
|
|
ip = ip[3] === undefined ? '' : ip[3];
|
|
|
|
|
|
+ let ipInfo = await this.getIpInfoFromApi(ip);
|
|
|
+
|
|
|
let userAgentObject = new UAParser(request.headers['user-agent']);
|
|
|
let osInfo = userAgentObject.getOS();
|
|
|
let cpuInfo = userAgentObject.getCPU();
|
|
@@ -69,7 +72,8 @@ class LogModel extends BaseModel {
|
|
|
let message = {
|
|
|
os: osInfo.name + ' ' + osInfo.version + ' ' + cpuInfo.architecture,
|
|
|
browser: browserInfo.name + ' ' + browserInfo.version,
|
|
|
- ip: ip
|
|
|
+ ip: ip,
|
|
|
+ ip_info: ipInfo
|
|
|
};
|
|
|
|
|
|
return this.addLog(userId, LogType.LOGIN_LOG, message);
|
|
@@ -99,6 +103,48 @@ class LogModel extends BaseModel {
|
|
|
return logList
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取ip信息
|
|
|
+ *
|
|
|
+ * @param {String} ip
|
|
|
+ * @return {Promise}
|
|
|
+ */
|
|
|
+ async getIpInfoFromApi(ip) {
|
|
|
+ let result = '';
|
|
|
+ if (ip === '') {
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ip === '127.0.0.1') {
|
|
|
+ return '服务器本机访问';
|
|
|
+ }
|
|
|
+
|
|
|
+ let getData = {
|
|
|
+ url: 'http://ip.taobao.com/service/getIpInfo.php?ip=' + ip,
|
|
|
+ encoding: 'utf8'
|
|
|
+ };
|
|
|
+ return new Promise(function (resolve, reject) {
|
|
|
+ try {
|
|
|
+ // 请求接口
|
|
|
+ Request.get(getData, function (err, getResponse, body) {
|
|
|
+ if (err) {
|
|
|
+ throw '请求错误';
|
|
|
+ }
|
|
|
+ if (getResponse.statusCode !== 200) {
|
|
|
+ throw '获取数据失败!';
|
|
|
+ }
|
|
|
+ let responseData = JSON.parse(body);
|
|
|
+ let ipData = responseData.data !== undefined ? responseData.data : [];
|
|
|
+ if (ipData.ip === undefined) {
|
|
|
+ throw '接口数据有误';
|
|
|
+ }
|
|
|
+ resolve(ipData.region + ipData.city + ' ' + ipData.isp);
|
|
|
+ });
|
|
|
+ } catch (error) {
|
|
|
+ reject([]);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
export default LogModel;
|