2

因此,我在 ChicagoBoss 度过了一个晚上。我现在正在尝试将 ChicagoBoss 与 MongoDB 连接起来,用它构建一个应用程序(并学习我在此过程中一直关注的两项新技术)。不幸的是,我似乎遇到了障碍。具体来说,创建用户后,密码似乎与设置的不同。请注意,除配置代码外,所有代码均直接来自 Chicago Boss 教程。

boss.config - 重新数据库:

 {db_host, "localhost"},
 {db_port, 27017},
 {db_adapter, mongodb},

登录功能

 login('POST', []) ->
   Name = Req:post_param("name"),
   case boss_db:find(user, [{name, Name}]) of
     [User] ->
       case User:check_password(Req:post_param("password")) of
         true ->
           {redirect, proplists:get_value("redirect",
            Req:post_params(), "/"), User:login_cookies()};
         false ->
          {ok, [{error, "Bad name/password combination"}]}
        end;
     [] ->
       {ok, [{error, "No User named " ++ Name}]}
   end.

然后 - 从管理界面创建用户并使用

   hash_for(Name, Password) ->
      Salt = mochihex:to_hex(erlang:md5(Name)),
      hash_password(Password, Salt).

要生成哈希,会发生以下两件事:

1) 用户被创建但不是作为用户 1 被标识,而是作为 usr-51970a2a3e01c027d4000001。

这是为什么?我认为 ChicagoBoss 遵循了自动递增数字索引的 Rails 约定?

2) 即使使用了传递给 hash_for 的密码,用户也永远无法登录。

3)芝加哥老板服务器重新启动后,新创建的数据库对象被保留 - 所以 mongo 至少正确保存了一些东西。

任何人都可以解释这里发生了什么吗?MongoDB 是如何试图拯救用户的?用 MongoDB 连接 Chicago Boss 的正确方法是什么,boss_db 本身不处理 MongoDB 吗?

所有这些都试图用作起点的教程是:

https://github.com/evanmiller/ChicagoBoss/wiki/An-Evening-With-Chicago-Boss

4

1 回答 1

2

Chicago Boss 确实支持 MongoDB,但与 SQL 数据库相比,MongoDB 的某些方面会有所不同。特别是,因为它是“巨大的”,MongoDB 使用 UUID 而不是自动递增的 ID。这允许在不保留集中计数器的情况下创建新文档。这就解释了为什么 ID 是“usr-51970a2a3e01c027d4000001”而不是“usr-1”。

至于密码问题,我认为下一步是添加调试打印语句。数据库期望什么哈希值?数据库是否保存了正确的哈希值?如果您通过管理界面创建用户,则可能会出现轻微错误,例如密码中的额外换行符。

此外,请随时在邮件列表或 IRC 上联系我们。

于 2013-05-18T13:27:54.257 回答