1

我需要从 3rd 方平台 (PHP) 以编程方式将新用户添加到 Django 设置中,看来我只需要在auth_user表中编写一个条目即可实现此目的。

我对么?我还需要做其他事情吗?

谢谢!

4

4 回答 4

1

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

于 2012-07-25T18:49:03.527 回答
1

假设您不介意重新实现 Django 为您做的事情,这将起作用;特别是散列密码,但也可能UserProfile像 Ignacio 建议的那样创建一个对象。您还需要为项目中依赖post_savepre_save信号的代码(如果有的话)制定另一种解决方案。

您还没有解释为什么要以这种方式做事:除了对 SQL 数据库的共享访问之外,您不能进行任何进程间通信的原因是什么?

如果您可以做不同的事情,那么设置一个仅限本地主机的 API 端点来创建用户可能更有意义,无论是使用include方法UserCreationForm还是helper 方法create_user()

于 2012-07-25T19:10:10.600 回答
1

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

于 2012-07-25T22:09:22.770 回答
0

它在 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=
于 2020-04-15T09:16:44.927 回答