After talking to someone who used password-instances, it's still somewhat annoying to have to make a field Text, just because you want to also use it with ToJSON to send between services.
It might be a good idea to give an example to make this more convenient, because they did say they think it's a good idea not to allow Password to be turned into JSON for security's sake.
I think something in the documentation near the JSON instances like the following would make it easier for users to switch between Text and Password within other types:
Instead of:
data LoginForm = LoginForm
{ loginUsername :: UserName
, loginPassword :: Text
}
and then changing the loginPassword to Password just before hashing or checking, do the following:
data LoginForm a = LoginForm
{ loginUserName :: UserName
, loginPassword :: a
} deriving (Show, Functor)
This way, you can have a ToJSON instance for LoginForm while still using LoginForm Password everywhere in your code, while just doing:
unsafeShowPassword <$> loginForm :: LoginForm Text
just before sending it over the wire, and you can still just get the password straight from JSON because of the FromJSON instance.
After talking to someone who used
password-instances
, it's still somewhat annoying to have to make a fieldText
, just because you want to also use it withToJSON
to send between services. It might be a good idea to give an example to make this more convenient, because they did say they think it's a good idea not to allowPassword
to be turned into JSON for security's sake.I think something in the documentation near the JSON instances like the following would make it easier for users to switch between
Text
andPassword
within other types:Instead of:
and then changing the
loginPassword
toPassword
just before hashing or checking, do the following:This way, you can have a
ToJSON
instance forLoginForm
while still usingLoginForm Password
everywhere in your code, while just doing:just before sending it over the wire, and you can still just get the password straight from JSON because of the
FromJSON
instance.