2016-07-06 7 views
0

私は次のような形式があります:私のホームページにパラメータが利用できないハンドラからパラメータ化されたYesodフォームを処理するにはどうすればよいですか?

userForm :: UserId -> Form UserDemographics 
userForm uid = renderDivs $ UserDemographics <$> 
    pure uid <*> 
    areq yearField "Year of birth" Nothing <*> 
    areq textField "Gender" Nothing <*> 
    areq countryField "Country of residence" Nothing <*> 
    areq boolField "Are you a computer programmer?" Nothing 

を、私は記入UserIdでフォームを作るためにgenerateFormPost $ userForm (entityKey userEnt)を使用しかし、私はAJAXでの入力を処理したいので、別々のHandlerは結果を取得します。フォーム。他のハンドラはUserIdへのアクセス権を持っていません。フォームをどのように処理すればよいですか?私はMaybe UserIdを受け入れるだけではなくUserIdまたはrunFormPostへの呼び出しのための偽のUserIdを補うためにuserFormの種類を変更することができ

postDemoFormR :: Handler RepJson 
postDemoFormR = do 
    ((formData, _), _) <- runFormPost $ userForm undefined 
    $(logDebug) $ pack $ show formData 
    return $ repJson() 

が、それらの両方がハックされている:私は、エラーがスローされ、これを試してみました。これを行う簡単でクリーンな方法はありますか?

答えて

1

あなたはhiddenFieldを使用することができますが、それはあなたが本当に(任意のユーザーが、ちょうど別の値を提出することによってUserIdを偽装することができるだろう)欲しいものはほぼ確実ないです。あなたがしようとしていることは、実際には "誰が現在のユーザーか"と言うことを前提としていれば、あなたのAJAXハンドラ(例えばrequireAuthId)で安全に判断する必要があります。

+0

'requireAuthId'ソリューションは私の特別なケースで動作します。ありがとう!一般的なケースでは、本のフォームのセクションのように、 'フォーム::おそらくUserId - >フォームブログ'を意味し、 'UserId'フィールドに' maybe hiddenField pure mbUid'のようなものを使用することを意味しますか?したがって、HTMLページにあらかじめ入力されたフィールドとPOSTハンドラーの隠しフィールドがあるフォームを構築しています。 –

+1

はい、そうです –

関連する問題