2016-12-10 15 views
1

共有予定リストを処理するための小さなアプリケーションを作成していますが、ほとんど完了していますが、非常に簡単な認証を追加したいと思います。Warpからの例外:ログイン時のスタックオーバーフロー

10/Dec/2016:13:36:02 +0100 [Debug#SQL] SELECT `name`,`password` FROM `user` WHERE `name`=?; [PersistText "Ulrar"] 
10/Dec/2016:13:36:08 +0100 [Error#yesod] Exception from Warp: stack overflow @(cstod_GjWCdZJB9K0EGPCbjz5gnP:Application Application.hs:133:15) 

ライン:私はこれを取得、私は足場サイト(https://github.com/yesodweb/yesod-cookbook/blob/master/cookbook/Using-HashDB-In-a-Scaffolded-Site.md)にhashdbを追加するためのドキュメントを踏襲し、それが正常にコンパイルが、私は、正しいユーザー名/パスワードでログインしたとき(データベースに手作業で追加します) Application.hsの133はこれです:$(qLocation >> = liftLoc) これはデフォルトコードのものです。

私の "User"テーブルはかなりシンプルですが、名前とパスワードにプライマリキーがあります。もちろん、その名前は一意でなければなりません。 データベースに少数のユーザーを手作業で追加する予定です。これは十分なものです。

私は手作業でクエリを試しましたが、期待どおりの結果を返し、間違ったユーザー名/パスワードでログインしようとすると "動作"しますが、エラーのあるログインフォームにリダイレクトされます。正しいユーザー名とパスワードのペアを使用するだけでその例外が発生し、ボタンをクリックしてから投げる前にしばらく時間がかかるようです。

私はhttp://localhost:3000/auth/page/hashdb/loginになります。「何かが間違っている」と書かれています。

私は私がイェソド-mysqlの足場サイトを使用していると私はYesodAuthインスタンスでこれを持って、何かを見逃している必要がありますと仮定します。

authPlugins app = [authHashDB (Just . UniqueUser)] 

私は何にも考えてなかったので、私はgetAuthId定義を削除そこに置くと、getAuthIdHashDBがもう明らかにエクスポートされないため、ドキュメントの定義はコンパイルされません。これは私の問題ですか?

ありがとうございます!

答えて

1

私の問題は実際にgetAuthIdを削除していました! 代わりにこれを追加して解決しました:

authenticate creds = runDB $ do 
     x <- getBy $ UniqueUser $ credsIdent creds 
     case x of 
     Just (Entity uid _) -> return $ Authenticated uid 
     Nothing -> return $ UserError InvalidUsernamePass 
関連する問題