public FacebookRegistrationModule(IFacebookApplication facebookApplication, IAppUserMapper userMapper) { Get["/register"] = _ => { // note: for more options to https://developers.facebook.com/docs/plugins/registration/ var fields = new object[] { new {name = "name"}, new {name = "email"}, new {name = "location"}, new {name = "gender"}, new {name = "birthday"}, new {name = "password", view = "not_prefilled"}, new { name = "like", description = "Do you like this plugin?", type = "checkbox", @default = "checked" }, new { name = "phone", description = "Phone Number", type = "text" }, new {name = "captcha"} }; dynamic model = new ExpandoObject(); model.FacebookRegistrationUrl = string.Format( "http://www.facebook.com/plugins/registration.php?client_id={0}&redirect_uri={1}&fields={2}&fb_only=true", facebookApplication.AppId, HttpUtility.UrlEncode("http://localhost:45254" + Context.ToFullPath("~/register/facebookcallback")), HttpUtility.UrlEncode(JsonSerializer.Current.SerializeObject(fields))); return View["register", model]; }; Post["/register/facebookcallback"] = _ => { dynamic signedRequest = Request.ParseFacebookSignedRequest(facebookApplication.AppId, facebookApplication.AppSecret); DateTime expiresOn = signedRequest.expires == 0 ? DateTime.MaxValue : DateTime.UtcNow.AddSeconds(Convert.ToDouble(signedRequest.expires)); DateTime issuedAt = DateTimeConvertor.FromUnixTime(signedRequest.issued_at); var accessToken = signedRequest.oauth_token; var name = signedRequest.registration.name; var userId = Convert.ToInt64(signedRequest.user_id); var user = new User { FacebookAccessToken = accessToken, FacebookId = userId, FacebookName = name, UserName = name }; userMapper.AddOrUpdate(user); return this.LoginAndRedirect(user.Identifier, expiresOn, "~/facebook"); }; }