【问题标题】:validate user credentials with sfGuard使用 sfGuard 验证用户凭据
【发布时间】:2011-12-27 15:37:19
【问题描述】:

我将 symfony 1.4 与 sfGuard 与 Propel 一起使用,考虑到这是我的第一次 symfony 体验,对于架构的某些部分,我仍然是个菜鸟。

我被要求创建一些网络服务,其中之一是获取用户(电子邮件)和密码并打印出一个 json 字符串反馈作为结果。

我不知道如何使用 sfGuard 执行这​​样的任务,所以如果有人有示例,将不胜感激。

我认为算法应该是sha1,因为在sf_guard_user表中我发现了类似的行

id  username                algorithm   salt                            password                                    created_at              last_login              is_active   is_super_admin
4   myuser@myhostname.com   sha1    623de866b49c696b452e0d12b55895c8    dcbe87a60a769b9e3b5f0988141b824fa5206235    2011-12-06 02:32:43     2011-12-27 15:49:41     1           0

【问题讨论】:

    标签: php symfony1 login propel sfguard


    【解决方案1】:

    看看sfGuardValidatorUser 类。 基本上是这样的:

    1. 检查具有给定用户名的用户是否存在
    2. 如果为 1,则检查它是否处于活动状态(is_active 字段)
    3. 如果是 2,则使用 sfGuardUser 类中的 checkPassword 公共方法检查密码(默认类似于 sha1(db_salt.submitted_password) == db_password

    【讨论】:

      【解决方案2】:

      好的,我发现了一个肮脏的把戏,但它确实有效。

      我可以伪造一个登录表单提交并使用通常的登录模式,它变成这样:

              $request->setParameter('signin', array(
                      'username' =>$request->getParameter("username"),
                      'password' =>$request->getParameter("password"),
                    ));
              $form = new BeetleLoginForm();
              $form->bind($request->getParameter('signin'));
              if ($form->isValid()) {
                  $values = $form->getValues();
                  $this->getUser()->signin($values['user'], false);
                  $resp['return'] = "YES";
                  $resp['message'] = "You have successfully logged in";
                  return $this->renderText(json_encode($resp));
      
              }
      

      我希望这可以帮助陷入同样困境的人。

      【讨论】:

      • 你不需要request,绑定方法使用数组即可。
      猜你喜欢
      • 2013-02-15
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-28
      • 2016-12-15
      • 2016-11-10
      • 2021-12-19
      相关资源
      最近更新 更多