- 7 Màu
- about
- Ajax
- ảnh
- Ảnh b tháng 4
- Ảnh Bìa
- Ảnh bìa ca sĩ
- Ảnh bìa Facebook
- Ảnh bìa gái đẹp
- Ảnh bìa giáng sinh
- ảnh bìa liên minh huyền thoại
- Ảnh bìa năm mới
- Ảnh bìa tháng 10
- Ảnh bìa tháng 11
- Ảnh bìa tháng 12
- Ảnh bìa tháng 4
- Ảnh bìa tháng 8
- Ảnh bìa tháng 9
- Ảnh chế
- Ảnh chibi
- Ảnh Đẹp
- Ảnh động
- asp.net core
- ASP.NET Core Identity
- asp.net mvc
- backend
- Blogger Templates
- blogspot
- Brush
- Cafe Code
- Christmas
- Chữ nghệ thuật
- Chúc mừng năm mới
- Chuyện tình bác sĩ
- Cô Đơn
- Code
- css
- Dame
- Double Exposure
- Download
- Ebook
- EPPlus
- Faq
- File 3D
- flutter
- Font chữ
- Font chữ việt hóa
- frontend
- Fshare.vn
- Giáng sinh
- Hacker
- Hacking
- Halloween
- Hiệu ứng chữ
- Hình nền máy tính
- học javascript
- Hot Girl
- HTML - CSS - ?
- html/css
- Hướng dẫn cover ảnh bìa
- Hướng dẫn Photoshop
- javascript
- javascript dom
- Khung ảnh bìa
- Khung Hình
- Kĩ năng seo
- lập trình asp.net
- lập trình mobile
- Logo
- Mặt Nạ
- Mockup
- ngày nhà giáo Việt Nam
- Ngày phụ nữ
- Noel
- Phần Mềm
- Phiêu Lưu
- Phím tắt
- Photoshop
- PNG
- Pokémon
- PSD
- PSD 3D Text
- PSD ảnh bìa
- psd đường một chiều
- Seo
- service
- Soái Ca
- Sơn Tùng M-TP
- source code
- Stock Ảnh
- Sự kiện Blogger
- Tâm Trạng
- tản mạn
- Tất cả bài viết
- template
- template chuẩn seo
- templates đẹp
- Tết
- Tết trung thu
- Text Effect
- Thầy cô
- Thủ Thuật
- Thủ thuật Blogger
- Thủ thuật Facebook
- Thủ thuật Photoshop
- Tiện ích Blogger
- Tìm hiểu về Photoshop
- Tình Yêu
- Tutorial
- Typo
- Typography
- ui ux design
- Valentine
- Vector
- Video
Tích hợp reCaptcha của Google vào project ASP.NET Core MVC
Chắc hẳn các bạn không còn quá lạ lẫm với với từ "CAPTCHA", chúng có ở khắp mọi nơi, là trợ thủ đắc lực của các trang web, nó giúp cho những website có chức năng đăng ký, hoặc nhận dữ liệu người dùng từ Form, để tránh việc bị spam đăng ký và ddos làm ảnh hưởng xấu đến website.
Bước 3: Trong Controllers.HomeControllers.cs thêm mới phương thức sau:
Bước 4: Add view cho phương thức vừa rồi trong Views.Home.DemoRecaptcha.cs như sau:
Bước 5: Add view Views.Home.Index.cs như sau:
Bước 6: Chúng ta tiến hành config site key trong appsettings.json như sau:
Các bạn cần thay đổi:
Bước 7: Cuối cùng, các bạn vào reCaptchaDemo.Startup tìm đến phương thức ConfigureServices và thêm:
Bước 8: Các bạn build project và chạy lên xem kết quả:
Hướng dẫn đăng ký reCaptcha
Bước 1: Trước tiên các bạn vào link sau: https://www.google.com/recaptcha/admin/create. Sau đó một form hiện ra và tiến hành nhập thông tin như hình dưới:
Bước 2: Các bạn lưu 2 mã (Site key, secret key) này lại:
Hướng dẫn tích hợp reCaptcha vào project ASP.NET Core MVC
Bước 1: Các bạn tạo mới project ASP.NET Core Web Application (mình dùng Core 3.1), đặt tên là reCaptcha.Demo
Bước 2: Trong reCaptcha.Demo.Models tạo mới class tên là ValidateReCaptchaAttribute.cs và thêm code sau:
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
namespace reCaptcha.Demo.Models
{
public class ValidateReCaptchaAttribute : ActionFilterAttribute
{
public const string ReCaptchaModelErrorKey = "ReCaptcha";
private const string RecaptchaResponseTokenKey = "g-recaptcha-response";
private const string ApiVerificationEndpoint = "https://www.google.com/recaptcha/api/siteverify";
private readonly IConfiguration m_configuration;
private readonly Lazy<string> m_reCaptchaSecret;
public ValidateReCaptchaAttribute(IConfiguration configuration)
{
if (configuration == null)
{
throw new ArgumentNullException("configuration");
}
this.m_configuration = configuration;
this.m_reCaptchaSecret = new Lazy<string>(() => m_configuration["ReCaptcha:Secret"]);
}
public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
await DoReCaptchaValidation(context);
await base.OnActionExecutionAsync(context, next);
}
private async Task DoReCaptchaValidation(ActionExecutingContext context)
{
if (!context.HttpContext.Request.HasFormContentType)
{
// Get request?
AddModelError(context, "No reCaptcha Token Found");
return;
}
string token = context.HttpContext.Request.Form[RecaptchaResponseTokenKey];
if (string.IsNullOrWhiteSpace(token))
{
AddModelError(context, "No reCaptcha Token Found");
}
else
{
await ValidateRecaptcha(context, token);
}
}
private static void AddModelError(ActionExecutingContext context, string error)
{
context.ModelState.AddModelError(ReCaptchaModelErrorKey, error.ToString());
}
private async Task ValidateRecaptcha(ActionExecutingContext context, string token)
{
using (var webClient = new HttpClient())
{
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("secret", this.m_reCaptchaSecret.Value),
new KeyValuePair<string, string>("response", token)
});
HttpResponseMessage response = await webClient.PostAsync(ApiVerificationEndpoint, content);
string json = await response.Content.ReadAsStringAsync();
var reCaptchaResponse = JsonConvert.DeserializeObject<ReCaptchaResponse>(json);
if (reCaptchaResponse == null)
{
AddModelError(context, "Unable To Read Response From Server");
}
else if (!reCaptchaResponse.success)
{
AddModelError(context, "Invalid reCaptcha");
}
}
}
}
public class ReCaptchaResponse
{
public bool success { get; set; }
public string challenge_ts { get; set; }
public string hostname { get; set; }
public string[] errorcodes { get; set; }
}
}
[HttpPost]
[ServiceFilter(typeof(ValidateReCaptchaAttribute))]
public IActionResult DemoRecaptcha()
{
if (ModelState.IsValid)
{
@ViewData["Message"] = "Model valid";
}
else
{
@ViewData["Message"] = "Invalid!!!";
}
return View();
}
Bước 4: Add view cho phương thức vừa rồi trong Views.Home.DemoRecaptcha.cs như sau:
@ViewData["Message"]
Bước 5: Add view Views.Home.Index.cs như sau:
@inject Microsoft.Extensions.Configuration.IConfiguration configuration
@{
ViewData["Title"] = "reCaptcha Demo";
}
@using (Html.BeginForm("DemoRecaptcha", "Home", FormMethod.Post))
{
<div class="g-recaptcha" data-sitekey="@(configuration["ReCaptcha:SiteKey"])"></div>
<br>
<input type="submit" value="Submit" />
}
@section Scripts {
<script src='https://www.google.com/recaptcha/api.js'></script>
}
Bước 6: Chúng ta tiến hành config site key trong appsettings.json như sau:
{
"ConnectionStrings": {
"DefaultConnection": "Server=CNPM-PC\\SQLEXPRESS;Database=reCaptchaDemo;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
},
"ReCaptcha:SiteKey": "6Le9JewUAAAAAHMYtBih8GDoSJBHx3PAAuqRwR0K"
}
Các bạn cần thay đổi:
- Server=CNPM-PC\\SQLEXPRESS → thành tên server của bạn
- Database=reCaptchaDemo → thành tên database bạn muốn kết nối
- Thay đổi ReCaptcha:SiteKey của bạn ở Bước 1.
Bước 7: Cuối cùng, các bạn vào reCaptchaDemo.Startup tìm đến phương thức ConfigureServices và thêm:
services.AddSingleton<IConfigurationRoot>(Configuration);
services.AddSingleton<IConfiguration>(Configuration);
services.AddScoped<ValidateReCaptchaAttribute>();
Bước 8: Các bạn build project và chạy lên xem kết quả:
Lời kết
Đây là ví dụ mẫu, mình chưa thực hiện với các form chưa các entites, nhưng để làm điều ấy rất đơn giản và tương tự. Mình sẽ hướng dẫn ở các bài sau.
Xem chi tiết hơn hướng dẫn bằng tiếng Anh với nguồn code tham khảo dưới đây:
Vậy là xong, hy vọng những gì mình chia sẻ có thể giúp ích cho các bạn.
Chúc các bạn thành công.
By Hiếu Quốc
Có lẽ bạn thích?
2 comments
Danh Mục
Blog Bạn Bè
Comments
Địa chỉ
52 Xô Viết Nghệ Tĩnh, Hải Châu, Đà Nẵng
lk không bạn ơi
ReplyDeleteCmt link nóng liền bạn ơi
Delete