Advertisement
otkalce

MVC Authentication

May 8th, 2023 (edited)
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.13 KB | Source Code | 0 0
  1. /* Authentication: Viewmodels */
  2.  
  3. public class VMChangePassword
  4. {
  5. [DisplayName("User name")]
  6. public string Username { get; set; }
  7. [DisplayName("Password")]
  8. public string Password { get; set; }
  9. [DisplayName("Confirm Password")]
  10. public string Password2 { get; set; }
  11. }
  12.  
  13. public class VMLogin
  14. {
  15. [DisplayName("User name")]
  16. public string Username { get; set; }
  17. [DisplayName("Password")]
  18. public string Password { get; set; }
  19. [DisplayName("Stay Signed-in")]
  20. public bool StaySignedIn { get; set; }
  21. public string? RedirectUrl { get; set; }
  22. }
  23.  
  24. public class VMRegister
  25. {
  26. [DisplayName("User name")]
  27. public string Username { get; set; }
  28. [DisplayName("E-mail")]
  29. public string Email { get; set; }
  30. [DisplayName("Confirm e-mail")]
  31. public string Email2 { get; set; }
  32. [DisplayName("First name")]
  33. public string FirstName { get; set; }
  34. [DisplayName("Last name")]
  35. public string LastName { get; set; }
  36. [DisplayName("Password")]
  37. public string Password { get; set; }
  38. [DisplayName("Repeat password")]
  39. public string Password2 { get; set; }
  40. }
  41.  
  42. public class VMValidateEmail
  43. {
  44. public string Email { get; set; }
  45. public string SecurityToken { get; set; }
  46. }
  47.  
  48. /* Authentication: index action */
  49. public IActionResult Index()
  50. {
  51. return View();
  52. }
  53.  
  54. /* Authentication: Index.cshtml view */
  55. <a asp-action="register" class="btn btn-outline-primary">Register</a>
  56. <a asp-action="validateEmail" asp-route-email="test@test.info" class="btn btn-outline-primary">Validate E-mail</a>
  57. <a asp-action="login" class="btn btn-outline-primary">Login</a>
  58. <form asp-action="logout">
  59. <button type="submit" class="btn btn-outline-primary">Logout</button>
  60. </form>
  61. <a asp-action="changepassword" class="btn btn-outline-primary">Change Password</a>
  62.  
  63. /* Authentication: register actions */
  64. public IActionResult Register()
  65. {
  66. return View();
  67. }
  68.  
  69. [HttpPost]
  70. public IActionResult Register(VMRegister register)
  71. {
  72. if(!ModelState.IsValid)
  73. return View(register);
  74.  
  75. // TODO: Save user to database
  76.  
  77. return RedirectToAction("Index");
  78. }
  79.  
  80. /* Authentication: Register.cshtml view */
  81. @using Task12.Models.User;
  82. @model VMRegister
  83. @{
  84. }
  85. <form asp-action="Register">
  86. <div class="row g-3 align-items-center">
  87. <div class="col-2">
  88. <label asp-for="Username" class="col-form-label"></label>
  89. </div>
  90. <div class="col-3">
  91. <input type="text" asp-for="Username" class="form-control">
  92. </div>
  93. <div class="col-3">
  94. <span asp-validation-for="Username" class="text-danger"></span>
  95. </div>
  96. </div>
  97. <div class="row g-3 align-items-center">
  98. <div class="col-2">
  99. <label asp-for="Email" class="col-form-label"></label>
  100. </div>
  101. <div class="col-3">
  102. <input type="text" asp-for="Email" class="form-control">
  103. </div>
  104. <div class="col-3">
  105. <span asp-validation-for="Email" class="text-danger"></span>
  106. </div>
  107. </div>
  108. <div class="row g-3 align-items-center">
  109. <div class="col-2">
  110. <label asp-for="Email2" class="col-form-label"></label>
  111. </div>
  112. <div class="col-3">
  113. <input type="text" asp-for="Email2" class="form-control">
  114. </div>
  115. <div class="col-3">
  116. <span asp-validation-for="Email2" class="text-danger"></span>
  117. </div>
  118. </div>
  119. <div class="row g-3 align-items-center">
  120. <div class="col-2">
  121. <label asp-for="FirstName" class="col-form-label"></label>
  122. </div>
  123. <div class="col-3">
  124. <input type="text" asp-for="FirstName" class="form-control">
  125. </div>
  126. <div class="col-3">
  127. <span asp-validation-for="FirstName" class="text-danger"></span>
  128. </div>
  129. </div>
  130. <div class="row g-3 align-items-center">
  131. <div class="col-2">
  132. <label asp-for="LastName" class="col-form-label"></label>
  133. </div>
  134. <div class="col-3">
  135. <input type="text" asp-for="LastName" class="form-control">
  136. </div>
  137. <div class="col-3">
  138. <span asp-validation-for="LastName" class="text-danger"></span>
  139. </div>
  140. </div>
  141. <div class="row g-3 align-items-center">
  142. <div class="col-2">
  143. <label asp-for="Password" class="col-form-label"></label>
  144. </div>
  145. <div class="col-3">
  146. <input type="password" asp-for="Password" class="form-control">
  147. </div>
  148. <div class="col-3">
  149. <span asp-validation-for="Password" class="text-danger"></span>
  150. </div>
  151. </div>
  152. <div class="row g-3 align-items-center">
  153. <div class="col-2">
  154. <label asp-for="Password2" class="col-form-label"></label>
  155. </div>
  156. <div class="col-3">
  157. <input type="password" asp-for="Password2" class="form-control">
  158. </div>
  159. <div class="col-3">
  160. <span asp-validation-for="Password2" class="text-danger"></span>
  161. </div>
  162. </div>
  163. <div class="row g-3">
  164. <div class="col-2"></div>
  165. <div class="col-3">
  166. <input type="submit" value="Register" class="btn btn-primary" />
  167. </div>
  168. </div>
  169. </form>
  170. @section Scripts {
  171. @{
  172. await Html.RenderPartialAsync("_ValidationScriptsPartial");
  173. }
  174. }
  175.  
  176. /* Authentication: validate e-mail action */
  177. public IActionResult ValidateEmail(VMValidateEmail validateEmail)
  178. {
  179. // TODO: Update user: e-mail validated
  180.  
  181. return View(validateEmail);
  182. }
  183.  
  184. /* Authentication: ValidateEmail.cshtml view */
  185. @using Task12.Models.User;
  186. @model VMValidateEmail
  187. @{
  188. }
  189. <h2>Thank you @Model?.Email</h2>
  190. <div>Your e-mail has been validated. You may login now.</div>
  191.  
  192. /* Authentication: login actions */
  193. public IActionResult Login()
  194. {
  195. return View();
  196. }
  197.  
  198. [HttpPost]
  199. public IActionResult Login(VMLogin login)
  200. {
  201. if (!ModelState.IsValid)
  202. return View(login);
  203.  
  204. // TODO: Check user credentials
  205.  
  206. if(login.RedirectUrl != null)
  207. return Redirect(login.RedirectUrl);
  208. else
  209. return RedirectToAction("Login");
  210. }
  211.  
  212. /* Authentication: Login.cshtml view */
  213. @using Task12.Models.User;
  214. @model VMLogin
  215. @{
  216. }
  217. <form asp-action="Login">
  218. <div class="row g-3 align-items-center">
  219. <div class="col-2">
  220. <label asp-for="Username" class="col-form-label"></label>
  221. </div>
  222. <div class="col-3">
  223. <input type="text" asp-for="Username" class="form-control">
  224. </div>
  225. <div class="col-3">
  226. <span asp-validation-for="Username" class="text-danger"></span>
  227. </div>
  228. </div>
  229. <div class="row g-3 align-items-center">
  230. <div class="col-2">
  231. <label asp-for="Password" class="col-form-label"></label>
  232. </div>
  233. <div class="col-3">
  234. <input type="password" asp-for="Password" class="form-control">
  235. </div>
  236. <div class="col-3">
  237. <span asp-validation-for="Password" class="text-danger"></span>
  238. </div>
  239. </div>
  240. <div class="row g-3 align-items-center">
  241. <div class="col-2">
  242. <label asp-for="StaySignedIn" class="col-form-label"></label>
  243. </div>
  244. <div class="col-3">
  245. <div class="form-check form-switch">
  246. <input type="checkbox" asp-for="StaySignedIn" class="form-check-input">
  247. </div>
  248. </div>
  249. <div class="col-3">
  250. </div>
  251. </div>
  252. <div class="row g-3">
  253. <div class="col-2"></div>
  254. <div class="col-3">
  255. <input type="hidden" asp-for="RedirectUrl" class="form-check-input">
  256. <input type="submit" value="Login" class="btn btn-primary" />
  257. </div>
  258. </div>
  259. </form>
  260. @section Scripts {
  261. @{
  262. await Html.RenderPartialAsync("_ValidationScriptsPartial");
  263. }
  264. }
  265.  
  266. /* Authentication: logout action */
  267. [HttpPost]
  268. public IActionResult Logout()
  269. {
  270. if (!ModelState.IsValid)
  271. return View();
  272.  
  273. // TODO: Logout user
  274.  
  275. return RedirectToAction("Login");
  276. }
  277.  
  278. /* Authentication: change password actions */
  279. public IActionResult ChangePassword()
  280. {
  281. return View();
  282. }
  283.  
  284. [HttpPost]
  285. public IActionResult ChangePassword(VMChangePassword changePassword)
  286. {
  287. if (!ModelState.IsValid)
  288. return View(changePassword);
  289.  
  290. // TODO: Change user password
  291.  
  292. return RedirectToAction("Index");
  293. }
  294.  
  295. /* Authentication: ChangePassword.cshtml view */
  296. @using Task12.Models.User;
  297. @model VMChangePassword
  298. @{
  299. }
  300. <form asp-action="ChangePassword">
  301. <div class="row g-3 align-items-center">
  302. <div class="col-2">
  303. <label asp-for="Username" class="col-form-label"></label>
  304. </div>
  305. <div class="col-3">
  306. <input type="text" asp-for="Username" class="form-control">
  307. </div>
  308. <div class="col-3">
  309. <span asp-validation-for="Username" class="text-danger"></span>
  310. </div>
  311. </div>
  312. <div class="row g-3 align-items-center">
  313. <div class="col-2">
  314. <label asp-for="Password" class="col-form-label"></label>
  315. </div>
  316. <div class="col-3">
  317. <input type="password" asp-for="Password" class="form-control">
  318. </div>
  319. <div class="col-3">
  320. <span asp-validation-for="Password" class="text-danger"></span>
  321. </div>
  322. </div>
  323. <div class="row g-3 align-items-center">
  324. <div class="col-2">
  325. <label asp-for="Password2" class="col-form-label"></label>
  326. </div>
  327. <div class="col-3">
  328. <input type="password" asp-for="Password2" class="form-control">
  329. </div>
  330. <div class="col-3">
  331. <span asp-validation-for="Password2" class="text-danger"></span>
  332. </div>
  333. </div>
  334. <div class="row g-3">
  335. <div class="col-2"></div>
  336. <div class="col-3">
  337. <input type="submit" value="Change password" class="btn btn-primary" />
  338. </div>
  339. </div>
  340. </form>
  341. @section Scripts {
  342. @{
  343. await Html.RenderPartialAsync("_ValidationScriptsPartial");
  344. }
  345. }
  346.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement