ASP.NET Core 8 MVC application में मोबाइल OTP आधारित रजिस्ट्रेशन, लॉगिन, फॉरगेट पासवर्ड और पासवर्ड रीसेट
ASP.NET Core 8 MVC application में मोबाइल OTP आधारित रजिस्ट्रेशन, लॉगिन, फॉरगेट पासवर्ड और पासवर्ड रीसेट की सुविधा को शामिल करने के लिए आपको निम्न चरणों का पालन करना होगा।
हम निम्नलिखित प्रमुख कार्यक्षेत्रों को कवर करेंगे:
OTP आधारित रजिस्ट्रेशन
OTP आधारित लॉगिन
फॉरगेट पासवर्ड और OTP भेजना
पासवर्ड रीसेट करना
नीचे हर फीचर के लिए स्टेप-बाय-स्टेप कोड दिया गया है।
1. प्रोजेक्ट सेटअप
Visual Studio 2022 में ASP.NET Core 8 MVC प्रोजेक्ट बनाएँ।
Entity Framework Core का उपयोग करें।
Authentication के लिए Identity System का उपयोग करें।
2. Models बनाएँ
User मॉडल:
using Microsoft.AspNetCore.Identity;
public class ApplicationUser : IdentityUser
{
public string OTP { get; set; }
public DateTime? OTPExpiryTime { get; set; }
}
RegisterViewModel:
public class RegisterViewModel
{
public string PhoneNumber { get; set; }
public string Password { get; set; }
public string ConfirmPassword { get; set; }
}
LoginViewModel:
public class LoginViewModel
{
public string PhoneNumber { get; set; }
public string OTP { get; set; }
}
ForgotPasswordViewModel:
public class ForgotPasswordViewModel
{
public string PhoneNumber { get; set; }
}
ResetPasswordViewModel:
public class ResetPasswordViewModel
{
public string PhoneNumber { get; set; }
public string OTP { get; set; }
public string NewPassword { get; set; }
public string ConfirmPassword { get; set; }
}
3. Services बनाएँ
OTP Generator Service:
public class OTPService
{
public static string GenerateOTP()
{
Random random = new Random();
return random.Next(100000, 999999).ToString();
}
}
SMS Sending Service (Dummy Example):
public class SmsService
{
public static void SendSms(string phoneNumber, string message)
{
// यहां SMS API का उपयोग करें। यह एक डमी कोड है।
Console.WriteLine($"Sending SMS to {phoneNumber}: {message}");
}
}
4. Controllers बनाएँ
AccountController
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
public class AccountController : Controller
{
private readonly UserManager<ApplicationUser> _userManager;
private readonly SignInManager<ApplicationUser> _signInManager;
public AccountController(UserManager<ApplicationUser> userManager, SignInManager<ApplicationUser> signInManager)
{
_userManager = userManager;
_signInManager = signInManager;
}
// 1. Register
[HttpPost]
public async Task<IActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser
{
UserName = model.PhoneNumber,
PhoneNumber = model.PhoneNumber
};
var result = await _userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
var otp = OTPService.GenerateOTP();
user.OTP = otp;
user.OTPExpiryTime = DateTime.UtcNow.AddMinutes(5);
await _userManager.UpdateAsync(user);
SmsService.SendSms(user.PhoneNumber, $"Your OTP is: {otp}");
return RedirectToAction("VerifyOtp", new { phoneNumber = user.PhoneNumber });
}
foreach (var error in result.Errors)
ModelState.AddModelError("", error.Description);
}
return View(model);
}
// 2. Verify OTP
[HttpPost]
public async Task<IActionResult> VerifyOtp(string phoneNumber, string otp)
{
var user = await _userManager.FindByNameAsync(phoneNumber);
if (user != null && user.OTP == otp && user.OTPExpiryTime > DateTime.UtcNow)
{
await _signInManager.SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");
}
ModelState.AddModelError("", "Invalid OTP");
return View();
}
// 3. Login
[HttpPost]
public async Task<IActionResult> Login(LoginViewModel model)
{
var user = await _userManager.FindByNameAsync(model.PhoneNumber);
if (user != null && user.OTP == model.OTP && user.OTPExpiryTime > DateTime.UtcNow)
{
await _signInManager.SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");
}
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
}
// 4. Forgot Password
[HttpPost]
public async Task<IActionResult> ForgotPassword(ForgotPasswordViewModel model)
{
var user = await _userManager.FindByNameAsync(model.PhoneNumber);
if (user != null)
{
var otp = OTPService.GenerateOTP();
user.OTP = otp;
user.OTPExpiryTime = DateTime.UtcNow.AddMinutes(5);
await _userManager.UpdateAsync(user);
SmsService.SendSms(user.PhoneNumber, $"Your OTP for password reset is: {otp}");
}
return RedirectToAction("ResetPassword", new { phoneNumber = model.PhoneNumber });
}
// 5. Reset Password
[HttpPost]
public async Task<IActionResult> ResetPassword(ResetPasswordViewModel model)
{
var user = await _userManager.FindByNameAsync(model.PhoneNumber);
if (user != null && user.OTP == model.OTP && user.OTPExpiryTime > DateTime.UtcNow)
{
var result = await _userManager.RemovePasswordAsync(user);
if (result.Succeeded)
{
result = await _userManager.AddPasswordAsync(user, model.NewPassword);
if (result.Succeeded)
return RedirectToAction("Login");
}
foreach (var error in result.Errors)
ModelState.AddModelError("", error.Description);
}
else
ModelState.AddModelError("", "Invalid OTP or OTP expired.");
return View(model);
}
}
5. Views बनाएँ
Register.cshtml
<form asp-action="Register" method="post">
<input type="text" name="PhoneNumber" placeholder="Phone Number" required />
<input type="password" name="Password" placeholder="Password" required />
<input type="password" name="ConfirmPassword" placeholder="Confirm Password" required />
<button type="submit">Register</button>
</form>
VerifyOtp.cshtml
<form asp-action="VerifyOtp" method="post">
<input type="hidden" name="PhoneNumber" value="@ViewData["PhoneNumber"]" />
<input type="text" name="OTP" placeholder="Enter OTP" required />
<button type="submit">Verify</button>
</form>
Login.cshtml
<form asp-action="Login" method="post">
<input type="text" name="PhoneNumber" placeholder="Phone Number" required />
<input type="text" name="OTP" placeholder="Enter OTP" required />
<button type="submit">Login</button>
</form>
ForgotPassword.cshtml
<form asp-action="ForgotPassword" method="post">
<input type="text" name="PhoneNumber" placeholder="Phone Number" required />
<button type="submit">Send OTP</button>
</form>
ResetPassword.cshtml
<form asp-action="ResetPassword" method="post">
<input type="text" name="PhoneNumber" placeholder="Phone Number" required />
<input type="text" name="OTP" placeholder="Enter OTP" required />
<input type="password" name="NewPassword" placeholder="New Password" required />
<input type="password" name="ConfirmPassword" placeholder="Confirm Password" required />
<button type="submit">Reset Password</button>
</form>
6. Database Migration
Use Add-Migration and Update-Database commands to update the database.
यह सेटअप एक बेसिक OTP आधारित रजिस्ट्रेशन और लॉगिन प्रक्रिया को संभालने के लिए पर्याप्त है। आप इसे SMS API और अन्य सुरक्षा उपायों के साथ विस्तारित कर सकते हैं।
public class SmsService { public static void SendSms(string phoneNumber, string message) { // यहां SMS API का उपयोग करें। यह एक डमी कोड है। Console.WriteLine($"Sending SMS to {phoneNumber}: {message}"); } } sms api kaha se laye
SMS API प्रदान करने वाली बहुत सारी सेवाएँ हैं, जिनका उपयोग आप अपने प्रोजेक्ट में कर सकते हैं। इनमें से कुछ लोकप्रिय विकल्प हैं:
1. Twilio (Recommended for Beginners)
Twilio एक प्रसिद्ध SMS सेवा प्रदाता है। यह API उपयोग करना आसान है और इसके साथ अच्छी डॉक्यूमेंटेशन उपलब्ध है।
वेबसाइट: https://www.twilio.com
Twilio के साथ शुरुआत करने के लिए:
Twilio पर एक खाता बनाएँ।
एक फ़्री ट्रायल अकाउंट प्राप्त करें (कुछ ट्रायल क्रेडिट मिलते हैं)।
अपने प्रोजेक्ट के लिए API Key और SID प्राप्त करें।
Twilio की NuGet पैकेज इंस्टॉल करें:
Install-Package Twilio
Twilio के साथ SMS भेजने का कोड:
using Twilio;
using Twilio.Rest.Api.V2010.Account;
public class SmsService
{
public static void SendSms(string phoneNumber, string message)
{
const string accountSid = "Your_Account_SID"; // Twilio Account SID
const string authToken = "Your_Auth_Token"; // Twilio Auth Token
TwilioClient.Init(accountSid, authToken);
var messageDetails = MessageResource.Create(
body: message,
from: new Twilio.Types.PhoneNumber("Your_Twilio_Number"),
to: new Twilio.Types.PhoneNumber(phoneNumber)
);
Console.WriteLine($"Message Sent: {messageDetails.Sid}");
}
}
2. Textlocal (Popular in India)
Textlocal भारत में किफायती और तेज़ SMS सेवा प्रदान करता है।
वेबसाइट: https://www.textlocal.com/
Textlocal के साथ SMS भेजने का कोड:
Textlocal पर खाता बनाएँ और API Key प्राप्त करें।
API Key और Sender ID प्राप्त करें।
Textlocal API का उपयोग करें:
using System.Net;
using System.IO;
public class SmsService
{
public static void SendSms(string phoneNumber, string message)
{
string apiKey = "Your_Textlocal_API_Key";
string sender = "TXTLCL"; // Sender ID
string numbers = phoneNumber; // Receiver's Phone Number
string url = $"https://api.textlocal.in/send/?apikey={apiKey}&numbers={numbers}&message={message}&sender={sender}";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
string responseText = reader.ReadToEnd();
Console.WriteLine($"Response: {responseText}");
}
}
}
3. MSG91
MSG91 भी भारत में एक बहुत ही लोकप्रिय SMS सेवा है।
वेबसाइट: https://msg91.com
MSG91 API का उपयोग करें:
MSG91 पर खाता बनाएँ और API Key प्राप्त करें।
Sender ID और ट्रांजेक्शनल SMS का उपयोग करें।
उदाहरण कोड:
using System.Net.Http;
using System.Threading.Tasks;
public class SmsService
{
public static async Task SendSms(string phoneNumber, string message)
{
string apiKey = "Your_MSG91_API_Key";
string sender = "SENDER_ID";
string route = "4"; // Transactional Route
string url = $"https://api.msg91.com/api/v2/sendsms?country=91&sender={sender}&route={route}&mobiles={phoneNumber}&authkey={apiKey}&message={message}";
using (HttpClient client = new HttpClient())
{
HttpResponseMessage response = await client.GetAsync(url);
string responseContent = await response.Content.ReadAsStringAsync();
Console.WriteLine($"Response: {responseContent}");
}
}
}
4. Fast2SMS
Fast2SMS कम लागत पर SMS सेवा प्रदान करता है, विशेष रूप से छोटे व्यवसायों के लिए।
वेबसाइट: https://www.fast2sms.com
Fast2SMS का उपयोग करें:
खाता बनाएँ और API Key प्राप्त करें।
HTTP या REST API का उपयोग करें।
5. Other SMS Providers
Nexmo (Vonage): https://www.vonage.com
Sinch: https://www.sinch.com
Plivo: https://www.plivo.com
कौन सी सेवा चुनें?
यदि आप ग्लोबल प्रोजेक्ट बना रहे हैं, तो Twilio या Nexmo बेहतर विकल्प हैं।
यदि आप भारत में उपयोग कर रहे हैं, तो Textlocal, MSG91, या Fast2SMS अधिक किफायती और तेज़ हैं।
अपने उपयोग के आधार पर सेवा की क़ीमत और प्रदर्शन की तुलना करें।
SMS API की सही कॉन्फ़िगरेशन के लिए हमेशा उनके आधिकारिक डॉक्यूमेंटेशन का पालन करें।
![ASP.NET Core 8 MVC application में मोबाइल OTP आधारित रजिस्ट्रेशन, लॉगिन, फॉरगेट पासवर्ड और पासवर्ड रीसेट](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgO9Pz5uV6QyPZ2NKhfQ8PtxPD2o4g07iWLBi_yWcfxNm90DK_VWEn4eTR0PKNoQ7oiK-QPdAXb0J2S1_f6CTGDLQBH6i4zswtgVPR0ToQaU3uCI2wHKVwwBawxVTRLtjVb94_U4ymTe6nNJddb8sXlcphxWr1KldyvrimM2IInM3swpW_gGj2obpEDEcK6/s72-c/How%20to%20send%20otp%20on%20any%20mobile%20number%20using%20Twilio.png)
No comments: