找回密码
 立即注册

QQ登录

只需一步,快速开始

何生 活字格认证

中级会员

40

主题

211

帖子

721

积分

中级会员

积分
721

活字格认证微信认证勋章

QQ

[已处理] 第三方用户集成

何生 活字格认证
中级会员   /  发表于:2020-11-27 14:31  /   查看:4422  /  回复:13
1金币
本帖最后由 何生 于 2020-12-1 15:40 编辑

各位老师好,我参考教程引用C#的类修改了一些内容,我要连接的mysql拉取用户实现第三方用户登录,在上传到活字格工程,发现一些报错,请帮帮忙看下是什么原因。错误内容如下:
我自己写的窗体能访问到mysql的用户表:


附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

13 个回复

倒序浏览
Erik.Xue讲师达人认证 悬赏达人认证 活字格认证 Wyn认证
超级版主   /  发表于:2020-11-27 14:38:14
沙发
您好,没太理解链接的mysql要上传到活字格工程是什么意思?

是要配置连接mysql吗?您用C#修改了什么内容呢?

可以详细描述一下吗?
回复 使用道具 举报
何生活字格认证
中级会员   /  发表于:2020-11-27 14:44:02
板凳
Erik.Xue 发表于 2020-11-27 14:38
您好,没太理解链接的mysql要上传到活字格工程是什么意思?

是要配置连接mysql吗?您用C#修改了什么内容 ...

第三方用户登录
回复 使用道具 举报
Simon.hu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2020-11-27 15:04:50
地板
看着你的代码似乎有问题,
目前的问题是,你的代码在找这个文件,但是你的机器上没有这个文件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
何生活字格认证
中级会员   /  发表于:2020-11-27 15:26:18
5#
Simon.hu 发表于 2020-11-27 15:04
看着你的代码似乎有问题,
目前的问题是,你的代码在找这个文件,但是你的机器上没有这个文件

我想原因不是代码错了,活字格连接mysql的方式不对吧,我引用的是教程里的方法SQLserver的数据库。
希望能提供一下连接mysql数据库读取用户的的案例。
回复 使用道具 举报
Erik.Xue讲师达人认证 悬赏达人认证 活字格认证 Wyn认证
超级版主   /  发表于:2020-11-27 17:38:22
6#
您好,您是参考哪里的教程更改的呢?您的意思是直接通过写C#代码的方式拉取活字格中的用户然后直接存到外联数据库里吗?
回复 使用道具 举报
何生活字格认证
中级会员   /  发表于:2020-11-27 17:51:53
7#
Erik.Xue 发表于 2020-11-27 17:38
您好,您是参考哪里的教程更改的呢?您的意思是直接通过写C#代码的方式拉取活字格中的用户然后直接存到外联 ...

是的,我外链的的mysql的数据库。谢谢。
回复 使用道具 举报
Erik.Xue讲师达人认证 悬赏达人认证 活字格认证 Wyn认证
超级版主   /  发表于:2020-11-27 18:11:50
8#
老板,您这个自己的写个第三方安全提供程序代码逻辑是什么我也不清楚呀。

解决方案就是,要在C#代码里通过代码的方式连接Mysql数据库,连接数据库后将用户数据存入到我们的UserInformation对象里。

如果您实在不会写的话,可以联系我们的商务同事报价哈~
回复 使用道具 举报
何生活字格认证
中级会员   /  发表于:2020-12-1 13:47:13
9#
Erik.Xue 发表于 2020-11-27 18:11
老板,您这个自己的写个第三方安全提供程序代码逻辑是什么我也不清楚呀。

解决方案就是,要在C#代码 ...

你好,我重新用教程里的C#工程修改了,并生成了类没有报错,但是上传到活字格工程还是不行。
我用C#写的窗体是可以读取到MYsql的用户表的。
using GrapeCity.Forguncy.SecurityProvider;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Security.Cryptography;
using openWeaverSecurityProvider;
using System.Collections;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using System.Data;
using MySql.Data.MySqlClient;


namespace WeaverPasswordSecurityProvider
{
    public class WeaverPasswordSecurityProvider : ISecurityProvider ,ISupportSettings
    {
        public string Name
        {
            get
            {
                return "WeaverPasswordSecurityProvider";
            }
        }
        public AuthenticationType AuthenticationType
        {
            get
            {
                return AuthenticationType.UserNameAndPassword;
            }
        }
        public UserInformationStorageMode UserInformationStorageMode
        {
            get
            {
                return UserInformationStorageMode.InMemoryCache;
            }
        }
        public UserInformations UserInformations
        {
            get
            {
                //创建UserInformations对象
                var userInfo = new UserInformations();
                //数据库连接字符串
                string constr = "server=172.18.18.79;port=3336;user=oa;password=123456;database=TD_OA";
                MySqlConnection con = new MySqlConnection(constr);
                //打开数据库链接
                con.Open();
                //从数据库中获取用户信息,返回userInfo
                var userTable = GetUser(con, userInfo);
                //从数据库中获取角色信息,返回userInfo
                GetRoles(con, userInfo, userTable);
                //从数据库中获取组织信息,返回userInfo
                GetDepartment(con, userInfo, userTable);
                //关闭数据库连接
                con.Close();
                //将获取到的userInfo返回
                return userInfo;
            }
        }
        private Dictionary<int, User> GetUser(MySqlConnection con, UserInformations userInfo)
        {
            string sql = string.Format("select * from user");
            var dataTable = GetDataTable(sql, con);

            try
            {
                Dictionary<int, User> userDic = new Dictionary<int, User>();

                for (int i = 0; i < dataTable.Rows.Count; i++)
                {
                    var row = dataTable.Rows;
                    var user = new User()
                    {
                        UserId = row["user_id"].ToString(),
                        FullName = row["user_name"].ToString(),
                        Email = row["email"].ToString(),
                    };
                    user.Properties.Add("性别", row["sex"].ToString());
                    user.Properties.Add("生日", row["birthday"].ToString());
                    user.Properties.Add("国籍", row["useing_key"].ToString());
                    user.Properties.Add("系统语言", row["using_finger"].ToString());
                    user.Properties.Add("手机", row["mobile_no"].ToString());
                    user.Properties.Add("电话", row["tel_no_detp"].ToString());

                    userInfo.Users.Add(user);

                    userDic.Add((int)row["id"], user);
                }

                return userDic;
            }
            catch (Exception e)
            {
                throw;
            }
            finally
            {
            }
        }
        private void GetRoles(MySqlConnection con, UserInformations userInfo, Dictionary<int, User> userDic)
        {
            var roleTable = GetDataTable("select priv_no,priv_name  from user_priv", con);
            var roleMemberTable = GetDataTable("select user_priv,user_priv_no from user", con);

            var roleMemberList = GetList(roleMemberTable);

            try
            {
                for (int i = 0; i < roleTable.Rows.Count; i++)
                {
                    var roleRow = roleTable.Rows;

                    var role = new Role()
                    {
                        Name = roleRow["priv_name"].ToString()
                    };

                    var members = roleMemberList.Where(r => object.Equals(r["uid"], roleRow["priv_no"]));

                    foreach (var item in members)
                    {
                        var uId = (int)item["user_priv"];

                        if (userDic.ContainsKey(uId))
                        {
                            role.Users.Add(userDic[uId]);
                        }
                    }

                    userInfo.Roles.Add(role);
                }
            }
            catch (Exception e)
            {
                throw;
            }
            finally
            {
            }
        }
        private void GetDepartment(MySqlConnection con, UserInformations userInfo, Dictionary<int, User> userDic)
        {
            var departmentTable = GetDataTable("select dept_id, dept_name, dept_no from department", con);
            var userTable = GetDataTable("select uid,user_id, dept_id from user", con);

            var DepartMemberList = GetList(userTable);

            List<OrganizationInfo> orgList = new List<OrganizationInfo>();
            try
            {
                for (int i = 0; i < departmentTable.Rows.Count; i++)
                {
                    var departmentRow = departmentTable.Rows;
                    int? superID = null ;
                    try
                    {
                        superID = Convert.ToInt32(departmentRow["dept_no"]);
                    }
                    catch (Exception)
                    {
                        superID = null;
                    }
                    var current = new OrganizationInfo()
                    {
                        ID = Convert.ToInt32(departmentRow["id"]),
                        parentID = superID,
                        Node = new Organization()
                        {
                            Name = departmentRow["dept_name"].ToString()
                        }
                    };
                    orgList.Add(current);
                }
                userInfo.Organizations.AddRange(AddSubOrganization(null, orgList));
            }
            catch (Exception e)
            {
                throw;
            }
            finally
            {
            }
        }
        private List<Organization> AddSubOrganization(int? parentId, List<OrganizationInfo> allNodes)
        {
            var result = new List<Organization>();

            foreach (var node in allNodes)
            {
                if(node.parentID == parentId)
                {
                    result.Add(node.Node);
                    node.Node.SubOrganizations.AddRange(AddSubOrganization(node.ID, allNodes));
                }
            }

            return result;
        }
        private List<DataRow> GetList(DataTable dataTable)
        {
            List<DataRow> list = new List<DataRow>();
            for (int i = 0; i < dataTable.Rows.Count; i++)
            {
                list.Add(dataTable.Rows);
            }
            return list;
        }
        private DataTable GetDataTable(string sql, MySqlConnection con)
        {
            using (MySqlCommand com = new MySqlCommand(sql, con))
            {
                using (var dataAdapter = new MySqlDataAdapter(com))
                {
                    var dataTable = new DataTable();
                    dataAdapter.Fill(dataTable);
                    return dataTable;
                }
            };
        }

        public bool AllowLogout
        {
            get
            {
                return true;
            }
        }

        public List<SecurityProviderSettings> Settings => new List<SecurityProviderSettings>();

        public User VerifyUser(Dictionary<string, string> properties)
        {
            var userName = properties["userName"];
            var password = properties["password"];
            string constr = "server=172.18.18.79;port=3336;user=oa;password=123456;database=TD_OA";
            MySqlConnection con = new MySqlConnection(constr);
            con.Open();
            string sql = string.Format("select * from user where user_id = '{0}'", userName);
            var loginTable = GetDataTable(sql, con);
            try
            {
                for (int i = 0; i < loginTable.Rows.Count; i++)
                {
                    var login = loginTable.Rows;
                    var loginid = login["user_id"].ToString();
                    var userpassword = login["password"].ToString();
                    if (userName != null && password != null)
                    {
                        var md5password = GetMD5(password);
                        if (userpassword.ToUpper() == md5password.ToUpper())
                        {
                            return new User
                            {
                                UserId = userName,
                                FullName = userName
                            };
                        }
                    }
                    return null;
                }
                return null;
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                con.Close();
            }
        }
        public void UpdateSetting(Dictionary<string, object> dictionary){}
        public static string GetMD5(string str)
        {
            var md5 = System.Security.Cryptography.MD5.Create();
            byte[] data = md5.ComputeHash(Encoding.UTF8.GetBytes(str));

            StringBuilder sBuilder = new StringBuilder();

            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data.ToString("x2"));
            }
            string s = sBuilder.ToString();
            return s;
        }
    }
}
回复 使用道具 举报
Eric.Liang讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2020-12-1 18:19:41
10#
何生 发表于 2020-12-1 13:47
你好,我重新用教程里的C#工程修改了,并生成了类没有报错,但是上传到活字格工程还是不行。
我用C#写的 ...

这两者是有区别的,C#窗体可能支持MySqlConnection 的连接方式,我看你的第一个图报的是MySqlConnection构造函数找不到,活字格的底层的.NetCore连接Mysql数据库的方式可能不是这样连接的
讲道理我也没专门写过,你可以看看这里
https://www.cnblogs.com/tangxiaowen/p/14007170.html


而且这些问题都是需要协助联调的,可能给你找一个代码能力强的合作伙伴帮你,效果会更好
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部