Account controller using Kidentity

- Uncomment account controller and switch to KIdentity
This commit is contained in:
Hao Kung 2014-03-03 15:28:24 -08:00
parent 2f8c4b213a
commit 169ffaa062
4 changed files with 408 additions and 408 deletions

View File

@ -1,174 +1,178 @@
//using System; using System;
//using System.Collections.Generic; using System.Collections.Generic;
//using System.Linq; using System.Linq;
//using System.Security.Claims; using System.Net;
//using System.Threading.Tasks; #if NET45
//using System.Web; using System.Security.Claims;
//using System.Web.Mvc; #else
//using Microsoft.AspNet.Identity; using System.Security.ClaimsK;
//using Microsoft.AspNet.Identity.EntityFramework; #endif
//using Microsoft.AspNet.Mvc; using System.Threading.Tasks;
using Microsoft.AspNet.Abstractions;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.InMemory;
using Microsoft.AspNet.Mvc;
//using Microsoft.Owin.Security; //using Microsoft.Owin.Security;
//using MvcMusicStore.Models; using MvcMusicStore.Models;
//namespace MvcMusicStore.Controllers namespace MvcMusicStore.Controllers
//{ {
//[Authorize] //[Authorize]
// public class AccountController : Controller public class AccountController : Controller
// { {
// public AccountController() public AccountController()
// : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()))) : this(new UserManager<ApplicationUser, string>(new InMemoryUserStore<ApplicationUser>()))
// { {
// } }
// public AccountController(UserManager<ApplicationUser> userManager) public AccountController(UserManager<ApplicationUser, string> userManager)
// { {
// UserManager = userManager; UserManager = userManager;
// } }
// public UserManager<ApplicationUser> UserManager { get; private set; } public UserManager<ApplicationUser, string> UserManager { get; private set; }
// private void MigrateShoppingCart(string UserName) private void MigrateShoppingCart(string userName)
// { {
//var storeDb = new MusicStoreEntities(); //var storeDb = new MusicStoreEntities();
// // Associate shopping cart items with logged-in user // Associate shopping cart items with logged-in user
//var cart = ShoppingCart.GetCart(storeDb, this.HttpContext); //var cart = ShoppingCart.GetCart(storeDb, this.HttpContext);
// cart.MigrateCart(UserName); //cart.MigrateCart(userName);
//storeDb.SaveChanges(); //storeDb.SaveChanges();
// Session[ShoppingCart.CartSessionKey] = UserName; //Session[ShoppingCart.CartSessionKey] = userName;
// } }
// // //
// // GET: /Account/Login // GET: /Account/Login
//[AllowAnonymous] //[AllowAnonymous]
// public IActionResult Login(string returnUrl) public IActionResult Login(string returnUrl)
// { {
// ViewBag.ReturnUrl = returnUrl; ViewBag.ReturnUrl = returnUrl;
// return View(); return View();
// } }
// // //
// // POST: /Account/Login // POST: /Account/Login
//[HttpPost] //[HttpPost]
//[AllowAnonymous] //[AllowAnonymous]
//[ValidateAntiForgeryToken] //[ValidateAntiForgeryToken]
// public async Task<IActionResult> Login(LoginViewModel model, string returnUrl) public async Task<IActionResult> Login(LoginViewModel model, string returnUrl)
// { {
//if (ModelState.IsValid) //if (ModelState.IsValid)
//{ //{
// var user = await UserManager.FindAsync(model.UserName, model.Password); var user = await UserManager.Find(model.UserName, model.Password);
// if (user != null) if (user != null)
// { {
// await SignInAsync(user, model.RememberMe); await SignIn(user, model.RememberMe);
// return RedirectToLocal(returnUrl); return RedirectToLocal(returnUrl);
// } }
// else else
// { {
// ModelState.AddModelError("", "Invalid username or password."); // ModelState.AddModelError("", "Invalid username or password.");
// } }
//} //}
// // If we got this far, something failed, redisplay form // If we got this far, something failed, redisplay form
// return View(model); return View(model);
// } }
// // //
// // GET: /Account/Register // GET: /Account/Register
//[AllowAnonymous] //[AllowAnonymous]
// public IActionResult Register() public IActionResult Register()
// { {
// return View(); return View();
// } }
// // //
// // POST: /Account/Register // POST: /Account/Register
//[HttpPost] //[HttpPost]
//[AllowAnonymous] //[AllowAnonymous]
//[ValidateAntiForgeryToken] //[ValidateAntiForgeryToken]
// public async Task<IActionResult> Register(RegisterViewModel model) public async Task<IActionResult> Register(RegisterViewModel model)
// { {
//if (ModelState.IsValid) //if (ModelState.IsValid)
//{ //{
// var user = new ApplicationUser() { UserName = model.UserName }; var user = new ApplicationUser() { UserName = model.UserName };
// var result = await UserManager.CreateAsync(user, model.Password); var result = await UserManager.Create(user, model.Password);
// if (result.Succeeded) if (result.Succeeded)
// { {
// await SignInAsync(user, isPersistent: false); await SignIn(user, isPersistent: false);
// return RedirectToAction("Index", "Home"); return null;//RedirectToAction("Index", "Home");
// } }
// else else
// { {
// AddErrors(result); AddErrors(result);
// } }
//} //}
// // If we got this far, something failed, redisplay form // If we got this far, something failed, redisplay form
// return View(model); return View(model);
// } }
// // //
// // POST: /Account/Disassociate // POST: /Account/Disassociate
//[HttpPost] //[HttpPost]
//[ValidateAntiForgeryToken] //[ValidateAntiForgeryToken]
// public async Task<IActionResult> Disassociate(string loginProvider, string providerKey) public async Task<IActionResult> Disassociate(string loginProvider, string providerKey)
// { {
// ManageMessageId? message = null; ManageMessageId? message = null;
// IdentityResult result = await UserManager.RemoveLoginAsync(User.Identity.GetUserId(), new UserLoginInfo(loginProvider, providerKey)); IdentityResult result = await UserManager.RemoveLogin(null /*User.Identity.GetUserId()*/, new UserLoginInfo(loginProvider, providerKey));
// if (result.Succeeded) if (result.Succeeded)
// { {
// message = ManageMessageId.RemoveLoginSuccess; message = ManageMessageId.RemoveLoginSuccess;
// } }
// else else
// { {
// message = ManageMessageId.Error; message = ManageMessageId.Error;
// } }
// return RedirectToAction("Manage", new { Message = message }); return null;//RedirectToAction("Manage", new { Message = message });
// } }
// // //
// // GET: /Account/Manage // GET: /Account/Manage
// public IActionResult Manage(ManageMessageId? message) public IActionResult Manage(ManageMessageId? message)
// { {
// ViewBag.StatusMessage = ViewBag.StatusMessage =
// message == ManageMessageId.ChangePasswordSuccess ? "Your password has been changed." message == ManageMessageId.ChangePasswordSuccess ? "Your password has been changed."
// : message == ManageMessageId.SetPasswordSuccess ? "Your password has been set." : message == ManageMessageId.SetPasswordSuccess ? "Your password has been set."
// : message == ManageMessageId.RemoveLoginSuccess ? "The external login was removed." : message == ManageMessageId.RemoveLoginSuccess ? "The external login was removed."
// : message == ManageMessageId.Error ? "An error has occurred." : message == ManageMessageId.Error ? "An error has occurred."
// : ""; : "";
// ViewBag.HasLocalPassword = HasPassword(); ViewBag.HasLocalPassword = HasPassword();
//ViewBag.ReturnUrl = Url.Action("Manage"); //ViewBag.ReturnUrl = Url.Action("Manage");
// return View(); return View();
// } }
// // //
// // POST: /Account/Manage // POST: /Account/Manage
//[HttpPost] //[HttpPost]
//[ValidateAntiForgeryToken] //[ValidateAntiForgeryToken]
// public async Task<IActionResult> Manage(ManageUserViewModel model) public async Task<IActionResult> Manage(ManageUserViewModel model)
// { {
// bool hasPassword = HasPassword(); bool hasPassword = HasPassword();
// ViewBag.HasLocalPassword = hasPassword; ViewBag.HasLocalPassword = hasPassword;
//ViewBag.ReturnUrl = Url.Action("Manage"); //ViewBag.ReturnUrl = Url.Action("Manage");
// if (hasPassword) if (hasPassword)
// { {
//if (ModelState.IsValid) //if (ModelState.IsValid)
//{ //{
// IdentityResult result = await UserManager.ChangePasswordAsync(User.Identity.GetUserId(), model.OldPassword, model.NewPassword); IdentityResult result = await UserManager.ChangePassword("userId" /*User.Identity.GetUserId()*/, model.OldPassword, model.NewPassword);
// if (result.Succeeded) if (result.Succeeded)
// { {
// return RedirectToAction("Manage", new { Message = ManageMessageId.ChangePasswordSuccess }); return null;//RedirectToAction("Manage", new { Message = ManageMessageId.ChangePasswordSuccess });
}
else
{
AddErrors(result);
}
//} //}
// else }
// { else
// AddErrors(result); {
// } // User does not have a password so remove any validation errors caused by a missing OldPassword field
// }
// }
// else
// {
// // User does not have a password so remove any validation errors caused by a missing OldPassword field
//ModelState state = ModelState["OldPassword"]; //ModelState state = ModelState["OldPassword"];
//if (state != null) //if (state != null)
//{ //{
@ -177,94 +181,96 @@
//if (ModelState.IsValid) //if (ModelState.IsValid)
//{ //{
// IdentityResult result = await UserManager.AddPasswordAsync(User.Identity.GetUserId(), model.NewPassword); IdentityResult result = await UserManager.AddPassword("userId" /*User.Identity.GetUserId()*/, model.NewPassword);
// if (result.Succeeded) if (result.Succeeded)
// { {
// return RedirectToAction("Manage", new { Message = ManageMessageId.SetPasswordSuccess }); return null;//RedirectToAction("Manage", new { Message = ManageMessageId.SetPasswordSuccess });
// } }
// else else
// { {
// AddErrors(result); AddErrors(result);
// } }
// }
//} //}
}
// // If we got this far, something failed, redisplay form // If we got this far, something failed, redisplay form
// return View(model); return View(model);
// } }
// // //
// // POST: /Account/ExternalLogin // POST: /Account/ExternalLogin
//[HttpPost] //[HttpPost]
//[AllowAnonymous] //[AllowAnonymous]
//[ValidateAntiForgeryToken] //[ValidateAntiForgeryToken]
// public IActionResult ExternalLogin(string provider, string returnUrl) public IActionResult ExternalLogin(string provider, string returnUrl)
// { {
// // Request a redirect to the external login provider // Request a redirect to the external login provider
//return new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl })); //return new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl }));
// } return null;
}
// // //
// // GET: /Account/ExternalLoginCallback // GET: /Account/ExternalLoginCallback
//[AllowAnonymous] //[AllowAnonymous]
// public async Task<IActionResult> ExternalLoginCallback(string returnUrl) public async Task<IActionResult> ExternalLoginCallback(string returnUrl)
// { {
// var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(); //var loginInfo = await AuthenticationManager.GetExternalLoginInfo();
//if (loginInfo == null) //if (loginInfo == null)
//{ //{
// return RedirectToAction("Login"); // return RedirectToAction("Login");
//} //}
// // Sign in the user with this external login provider if the user already has a login // Sign in the user with this external login provider if the user already has a login
// var user = await UserManager.FindAsync(loginInfo.Login); var user = await UserManager.Find(null/*loginInfo.Login*/);
// if (user != null) if (user != null)
// { {
// await SignInAsync(user, isPersistent: false); await SignIn(user, isPersistent: false);
// return RedirectToLocal(returnUrl); return RedirectToLocal(returnUrl);
// } }
// else else
// { {
// // If the user does not have an account, then prompt the user to create an account // If the user does not have an account, then prompt the user to create an account
// ViewBag.ReturnUrl = returnUrl; ViewBag.ReturnUrl = returnUrl;
// ViewBag.LoginProvider = loginInfo.Login.LoginProvider; ViewBag.LoginProvider = null;//loginInfo.Login.LoginProvider;
// return View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel { UserName = loginInfo.DefaultUserName }); return View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel { /*UserName = loginInfo.DefaultUserName*/ });
// } }
// } }
// // //
// // POST: /Account/LinkLogin // POST: /Account/LinkLogin
//[HttpPost] //[HttpPost]
//[ValidateAntiForgeryToken] //[ValidateAntiForgeryToken]
// public IActionResult LinkLogin(string provider) public IActionResult LinkLogin(string provider)
// { {
// // Request a redirect to the external login provider to link a login for the current user // Request a redirect to the external login provider to link a login for the current user
//return new ChallengeResult(provider, Url.Action("LinkLoginCallback", "Account"), User.Identity.GetUserId()); //return new ChallengeResult(provider, Url.Action("LinkLoginCallback", "Account"), User.Identity.GetUserId());
// } return null;
}
// // //
// // GET: /Account/LinkLoginCallback // GET: /Account/LinkLoginCallback
// public async Task<IActionResult> LinkLoginCallback() public async Task<IActionResult> LinkLoginCallback()
// { {
// var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(XsrfKey, User.Identity.GetUserId()); //var loginInfo = await AuthenticationManager.GetExternalLoginInfo(XsrfKey, User.Identity.GetUserId());
//if (loginInfo == null) //if (loginInfo == null)
//{ //{
// return RedirectToAction("Manage", new { Message = ManageMessageId.Error }); // return RedirectToAction("Manage", new { Message = ManageMessageId.Error });
//} //}
// var result = await UserManager.AddLoginAsync(User.Identity.GetUserId(), loginInfo.Login); //var result = await UserManager.AddLogin(User.Identity.GetUserId(), loginInfo.Login);
//if (result.Succeeded) //if (result.Succeeded)
//{ //{
// return RedirectToAction("Manage"); // return RedirectToAction("Manage");
//} //}
// return RedirectToAction("Manage", new { Message = ManageMessageId.Error }); return null;//RedirectToAction("Manage", new { Message = ManageMessageId.Error });
// } }
// // //
// // POST: /Account/ExternalLoginConfirmation // POST: /Account/ExternalLoginConfirmation
//[HttpPost] //[HttpPost]
//[AllowAnonymous] //[AllowAnonymous]
//[ValidateAntiForgeryToken] //[ValidateAntiForgeryToken]
// public async Task<IActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl) public async Task<IActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl)
// { {
//if (User.Identity.IsAuthenticated) //if (User.Identity.IsAuthenticated)
//{ //{
// return RedirectToAction("Manage"); // return RedirectToAction("Manage");
@ -272,69 +278,59 @@
//if (ModelState.IsValid) //if (ModelState.IsValid)
//{ //{
// // Get the information about the user from the external login provider // Get the information about the user from the external login provider
//var info = await AuthenticationManager.GetExternalLoginInfoAsync(); //var info = await AuthenticationManager.GetExternalLoginInfoAsync();
//if (info == null) //if (info == null)
//{ //{
// return View("ExternalLoginFailure"); // return View("ExternalLoginFailure");
//} //}
// var user = new ApplicationUser() { UserName = model.UserName }; var user = new ApplicationUser() { UserName = model.UserName };
// var result = await UserManager.CreateAsync(user); var result = await UserManager.Create(user);
// if (result.Succeeded) if (result.Succeeded)
// { {
// result = await UserManager.AddLoginAsync(user.Id, info.Login); result = await UserManager.AddLogin(user.Id, null/*info.Login*/);
// if (result.Succeeded) if (result.Succeeded)
// { {
// await SignInAsync(user, isPersistent: false); await SignIn(user, isPersistent: false);
// return RedirectToLocal(returnUrl); return null;//RedirectToLocal(returnUrl);
// } }
// } }
// AddErrors(result); AddErrors(result);
//} //}
// ViewBag.ReturnUrl = returnUrl; ViewBag.ReturnUrl = returnUrl;
// return View(model); return View(model);
// } }
// // //
// // POST: /Account/LogOff // POST: /Account/LogOff
//[HttpPost] //[HttpPost]
//[ValidateAntiForgeryToken] //[ValidateAntiForgeryToken]
// public IActionResult LogOff() public IActionResult LogOff()
// { {
//AuthenticationManager.SignOut(); //AuthenticationManager.SignOut();
// return RedirectToAction("Index", "Home"); return null;//RedirectToAction("Index", "Home");
// } }
// // //
// // GET: /Account/ExternalLoginFailure // GET: /Account/ExternalLoginFailure
//[AllowAnonymous] //[AllowAnonymous]
// public IActionResult ExternalLoginFailure() public IActionResult ExternalLoginFailure()
// { {
// return View(); return View();
// } }
//[ChildActionOnly] //[ChildActionOnly]
// public IActionResult RemoveAccountList() public IActionResult RemoveAccountList()
// { {
// var linkedAccounts = UserManager.GetLogins(User.Identity.GetUserId()); //var linkedAccounts = UserManager.GetLogins(null /*User.Identity.GetUserId()*/);
//ViewBag.ShowRemoveButton = HasPassword() || linkedAccounts.Count > 1; //ViewBag.ShowRemoveButton = HasPassword() || linkedAccounts.Count > 1;
// return (IActionResult)PartialView("_RemoveAccountPartial", linkedAccounts); return null;//(IActionResult)PartialView("_RemoveAccountPartial", linkedAccounts);
// } }
// protected override void Dispose(bool disposing) #region Helpers
// { // Used for XSRF protection when adding external logins
// if (disposing && UserManager != null) private const string XsrfKey = "XsrfId";
// {
// UserManager.Dispose();
// UserManager = null;
// }
// base.Dispose(disposing);
// }
// #region Helpers
// // Used for XSRF protection when adding external logins
// private const string XsrfKey = "XsrfId";
//private IAuthenticationManager AuthenticationManager //private IAuthenticationManager AuthenticationManager
//{ //{
@ -344,44 +340,45 @@
// } // }
//} //}
// private async Task SignInAsync(ApplicationUser user, bool isPersistent) private async Task SignIn(ApplicationUser user, bool isPersistent)
// { {
//AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie); //AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
// var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie); var identity = await UserManager.CreateIdentity(user, "Application" /*DefaultAuthenticationTypes.ApplicationCookie */);
//AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity); //AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
// // Migrate the user's shopping cart // Migrate the user's shopping cart
// MigrateShoppingCart(user.UserName); MigrateShoppingCart(user.UserName);
// } }
// private void AddErrors(IdentityResult result) private void AddErrors(IdentityResult result)
// { {
// foreach (var error in result.Errors) foreach (var error in result.Errors)
// { {
//ModelState.AddModelError("", error); //ModelState.AddModelError("", error);
// } }
// } }
// private bool HasPassword() private bool HasPassword()
// { {
// var user = UserManager.FindById(User.Identity.GetUserId()); // No sync helpers yet
//var user = UserManager.FindById(null /*User.Identity.GetUserId()*/);
//if (user != null) //if (user != null)
//{ //{
// return user.PasswordHash != null; // return user.PasswordHash != null;
//} //}
// return false; return false;
// } }
// public enum ManageMessageId public enum ManageMessageId
// { {
// ChangePasswordSuccess, ChangePasswordSuccess,
// SetPasswordSuccess, SetPasswordSuccess,
// RemoveLoginSuccess, RemoveLoginSuccess,
// Error Error
// } }
// private IActionResult RedirectToLocal(string returnUrl) private IActionResult RedirectToLocal(string returnUrl)
// { {
//if (Url.IsLocalUrl(returnUrl)) //if (Url.IsLocalUrl(returnUrl))
//{ //{
// return Redirect(returnUrl); // return Redirect(returnUrl);
@ -390,7 +387,8 @@
//{ //{
// return RedirectToAction("Index", "Home"); // return RedirectToAction("Index", "Home");
//} //}
// } return null;
}
//private class ChallengeResult : HttpUnauthorizedResult //private class ChallengeResult : HttpUnauthorizedResult
//{ //{
@ -420,6 +418,6 @@
// context.HttpContext.GetOwinContext().Authentication.Challenge(properties, LoginProvider); // context.HttpContext.GetOwinContext().Authentication.Challenge(properties, LoginProvider);
// } // }
//} //}
// #endregion #endregion
// } }
//} }

View File

@ -1,11 +1,11 @@
//using Microsoft.AspNet.Identity.EntityFramework; using Microsoft.AspNet.Identity.InMemory;
//namespace MvcMusicStore.Models namespace MvcMusicStore.Models
//{ {
// // You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more. // You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.
// public class ApplicationUser : IdentityUser public class ApplicationUser : InMemoryUser
// { {
// } }
//public class ApplicationDbContext : IdentityDbContext<ApplicationUser> //public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
//{ //{
@ -14,4 +14,4 @@
// { // {
// } // }
//} //}
//} }

View File

@ -3,7 +3,9 @@
"Microsoft.AspNet.Abstractions": "0.1-alpha-*", "Microsoft.AspNet.Abstractions": "0.1-alpha-*",
"Microsoft.AspNet.DependencyInjection" : "0.1-alpha-*", "Microsoft.AspNet.DependencyInjection" : "0.1-alpha-*",
"Microsoft.AspNet.Mvc.Core" : "0.1-alpha-*", "Microsoft.AspNet.Mvc.Core" : "0.1-alpha-*",
"Microsoft.Data.Entity" : "0.1-alpha-*" "Microsoft.Data.Entity" : "0.1-alpha-*",
"Microsoft.AspNet.Identity" : "0.1-alpha-*",
"Microsoft.AspNet.Identity.InMemory" : "0.1-alpha-*"
}, },
"configurations": { "configurations": {
"net45": { "net45": {

View File

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Antlr" version="3.4.1.9004" targetFramework="net45" /> <package id="Antlr" version="3.4.1.9004" targetFramework="net45" />
<package id="bootstrap" version="3.0.0" targetFramework="net45" /> <package id="bootstrap" version="2.3.1" targetFramework="net45" />
<package id="EntityFramework" version="6.0.2" targetFramework="net45" /> <package id="EntityFramework" version="6.0.2" targetFramework="net45" />
<package id="jQuery" version="1.9.1" targetFramework="net45" /> <package id="jQuery" version="1.9.1" targetFramework="net45" />
<package id="jQuery.Validation" version="1.8.1" targetFramework="net45" /> <package id="jQuery.Validation" version="1.11.1" targetFramework="net45" />
<package id="Microsoft.AspNet.Identity.Core" version="1.0.0" targetFramework="net45" /> <package id="Microsoft.AspNet.Identity.Core" version="1.0.0" targetFramework="net45" />
<package id="Microsoft.AspNet.Identity.EntityFramework" version="1.0.0" targetFramework="net45" /> <package id="Microsoft.AspNet.Identity.EntityFramework" version="1.0.0" targetFramework="net45" />
<package id="Microsoft.AspNet.Identity.Owin" version="1.0.0" targetFramework="net45" /> <package id="Microsoft.AspNet.Identity.Owin" version="1.0.0" targetFramework="net45" />
@ -14,17 +14,17 @@
<package id="Microsoft.AspNet.WebPages" version="3.0.0" targetFramework="net45" /> <package id="Microsoft.AspNet.WebPages" version="3.0.0" targetFramework="net45" />
<package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.0.0" targetFramework="net45" /> <package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.0.0" targetFramework="net45" />
<package id="Microsoft.Owin" version="2.0.2" targetFramework="net45" /> <package id="Microsoft.Owin" version="2.0.2" targetFramework="net45" />
<package id="Microsoft.Owin.Host.SystemWeb" version="2.0.0" targetFramework="net45" /> <package id="Microsoft.Owin.Host.SystemWeb" version="2.0.2" targetFramework="net45" />
<package id="Microsoft.Owin.Security" version="2.0.2" targetFramework="net45" /> <package id="Microsoft.Owin.Security" version="2.0.2" targetFramework="net45" />
<package id="Microsoft.Owin.Security.Cookies" version="2.0.2" targetFramework="net45" /> <package id="Microsoft.Owin.Security.Cookies" version="2.0.2" targetFramework="net45" />
<package id="Microsoft.Owin.Security.Facebook" version="2.0.0" targetFramework="net45" /> <package id="Microsoft.Owin.Security.Facebook" version="2.0.2" targetFramework="net45" />
<package id="Microsoft.Owin.Security.Google" version="2.0.0" targetFramework="net45" /> <package id="Microsoft.Owin.Security.Google" version="2.0.2" targetFramework="net45" />
<package id="Microsoft.Owin.Security.MicrosoftAccount" version="2.0.0" targetFramework="net45" /> <package id="Microsoft.Owin.Security.MicrosoftAccount" version="2.0.2" targetFramework="net45" />
<package id="Microsoft.Owin.Security.OAuth" version="2.0.2" targetFramework="net45" /> <package id="Microsoft.Owin.Security.OAuth" version="2.0.2" targetFramework="net45" />
<package id="Microsoft.Owin.Security.Twitter" version="2.0.0" targetFramework="net45" /> <package id="Microsoft.Owin.Security.Twitter" version="2.0.2" targetFramework="net45" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" /> <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
<package id="Modernizr" version="2.6.2" targetFramework="net45" /> <package id="Modernizr" version="2.6.2" targetFramework="net45" />
<package id="Newtonsoft.Json" version="4.5.11" targetFramework="net45" /> <package id="Newtonsoft.Json" version="5.0.8" targetFramework="net45" />
<package id="Owin" version="1.0" targetFramework="net45" /> <package id="Owin" version="1.0" targetFramework="net45" />
<package id="Respond" version="1.2.0" targetFramework="net45" /> <package id="Respond" version="1.2.0" targetFramework="net45" />
<package id="WebGrease" version="1.5.2" targetFramework="net45" /> <package id="WebGrease" version="1.5.2" targetFramework="net45" />