Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过直接写入数据库,向Django添加新用户_Django_Django Models_User Management - Fatal编程技术网

通过直接写入数据库,向Django添加新用户

通过直接写入数据库,向Django添加新用户,django,django-models,user-management,Django,Django Models,User Management,我需要通过编程从第三方平台(PHP)向Django设置中添加一个新用户,似乎我只需要在auth_user表中编写一个条目就可以实现这一点 我说得对吗?我还需要做些别的事情吗 谢谢 从技术上讲是的,但可能还有其他要求,例如创建用户配置文件,这些要求由业务逻辑而不是数据库控制。也许您应该考虑在一个单独的表/数据库中创建用户,并编写一个自定义身份验证后端,它将用户从这个共享位置导入。 < P>这将起作用,假设您不介意重新实现Django为您所做的事情;特别是对密码进行哈希运算,但也可能像Ignacio

我需要通过编程从第三方平台(PHP)向Django设置中添加一个新用户,似乎我只需要在
auth_user
表中编写一个条目就可以实现这一点

我说得对吗?我还需要做些别的事情吗


谢谢

从技术上讲是的,但可能还有其他要求,例如创建
用户配置文件
,这些要求由业务逻辑而不是数据库控制。也许您应该考虑在一个单独的表/数据库中创建用户,并编写一个自定义身份验证后端,它将用户从这个共享位置导入。

< P>这将起作用,假设您不介意重新实现Django为您所做的事情;特别是对密码进行哈希运算,但也可能像Ignacio建议的那样创建一个
UserProfile
对象。您还需要根据项目中的
post\u save
pre\u save
信号(如果有)为代码制定另一个解决方案

您还没有解释为什么要这样做:是什么命令您除了共享对SQL数据库的访问之外不能进行任何进程间通信


如果您可以做不同的事情,那么设置一个仅本地主机的API端点来创建用户可能更有意义,可以使用或。

如果可能,我会重新考虑您的方法。在我看来,在绕过django经验证的业务逻辑的同时,弄乱django的表,可能会带来数据完整性问题和难以发现错误的风险。我将通过在django中编写一个简单的API来实现这一点,您可以向php脚本公开该API,它将允许django代表php添加用户。就编码时间和复杂性而言,这实际上可能是一种更简单的方法

它在PHP中为我工作

/*
 *
 * DJANGO AUTH
 * https://docs.djangoproject.com/fr/2.2/topics/auth/passwords/
 * <algorithm>$<iterations>$<salt>$<hash>
 * 
*/

function genRandomString($length = 32) {
    $retval = "";
    for ($i=0; $i < $length; $i++) { 
        $retval .= chr(rand(97,122));
    }
    return $retval;
}

$algo = 'sha256';
$password = 'your_password_here';
$salt = genRandomString(12);
$iteration = 180000;

$hash_password = base64_encode(hash_pbkdf2($algo, $password, $salt, $iteration, 32, true));
$link_for_db = 'pbkdf2_' . $algo . '$' . $iteration . '$' . $salt . '$' . $hash_password;
var_dump($link_for_db); //pbkdf2_sha256$180000$u02p8yhQmV3d$AOX+AZQmxe9gwlJaQn1P0f6rrOht7o9cVCY0nG5xa3g=
/*
*
*DJANGO AUTH
* https://docs.djangoproject.com/fr/2.2/topics/auth/passwords/
* $$$
* 
*/
函数字符串($length=32){
$retval=“”;
对于($i=0;$i<$length;$i++){
$retval.=chr(兰特(97122));
}
返回$retval;
}
$algo='sha256';
$password='your_password_here';
$salt=字符串(12);
$18万;
$hash_password=base64_encode(hash_pbkdf2($algo,$password,$salt,$iteration,32,true));
$link_for_db='pbkdf2_u'$算法“$”$迭代。“$”$盐。$$hash_密码;
var_dump($link_代表_db)//pbkdf2_sha256$180000$u02p8yhQmV3d$AOX+AZQMXE9GWLJAQN1P0F6RRHOHT7O9CVCY0NG5XA3G=

是的,您可以将数据直接写入
auth\u user
表中。注意,您需要使用Django使用的相同格式对密码进行散列。如果站点具有用户配置文件,则可能需要将相关数据添加到配置文件表中。