引用 WebSharper 2.5 alpah 文档的远程处理组件假设:
RPC 可调用方法可以安全地由未经身份验证的客户端从 Web 调用。
有没有办法保护远程调用,所以它们只能从经过身份验证的客户端调用?
引用 WebSharper 2.5 alpah 文档的远程处理组件假设:
RPC 可调用方法可以安全地由未经身份验证的客户端从 Web 调用。
有没有办法保护远程调用,所以它们只能从经过身份验证的客户端调用?
WebSharper 网站中的一个示例是一个聊天应用程序,它似乎通过提供一个返回身份验证令牌的登录方法来做到这一点,然后需要该方法来调用其他函数:
[<Rpc>]
let Login (user: string) : Option<Auth.Token> =
let s = State.Get()
if s.Users.ContainsKey user then
None
else
// (snip)
user |> Auth.Generate |> Some
[<Rpc>]
let Poll (auth: Auth.Token) (time: int) =
// (snip)
完整的聊天示例可以在这里找到:http ://www.websharper.com/samples/Chat
我自己一直在玩这个。事实证明,如果您使用的是表单身份验证,您可以从 RPC 方法中读取当前的 HTTPContext,这样您就可以执行以下操作:
[<Rpc>]
let protectedMethod () =
match IntelliFactory.WebSharper.Sitelets.UserSession.GetLoggedInUser() with
| Some(username) ->
// User is authenticated... do stuff
()
| None -> failwith "Authentication failed"