Facebook Authentication Setup in ASP.NET

Mar 18, 2024

Introduction:

Integrating Facebook authentication into your .NET project offers a user-friendly login option, allowing users to sign in with their Facebook credentials. This guide will walk you through the steps to implement Facebook login, enhancing user convenience, trust, and providing access to user data.

Creating a Demo for Facebook Authentication in .NET

Step 1: Set Up .NET Project 

1. Create a new ASP.NET MVC project using Visual Studio or your preferred IDE. 

Step 2: Create Facebook Developer App 

2. Go to the [Facebook Developer Portal] : https://developers.facebook.com/

3. Create a new app. 

4. Configure the app details and obtain the App ID and App Secret. 

  

Step 3: Configure Facebook Authentication in .NET Project 

5. In your .NET project, open `Startup.cs`. 

6. Configure Facebook authentication: 

 services.AddAuthentication(options => 
   { 
       options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; 
       options.DefaultChallengeScheme = FacebookDefaults.AuthenticationScheme; 
   })
   .AddCookie() 
   .AddFacebook(options => 
   { 
       options.AppId = "Your-Facebook-App-ID"; 

       options.AppSecret = "Your-Facebook-App-Secret"; 

       options.CallbackPath = new PathString("/Auth/FacebookCallback");
   }); 

Step 4: Create AuthController 

7. Create an `AuthController` with actions for Facebook login and callback: 

 public class AuthController : Controller 
   { 
       public IActionResult Index() 
       { 
           return View(); 
       } 
       [HttpGet] 
       [Route("signin-facebook")] 
       public async Task<IActionResult> FacebookCallback() 
       { 
           var result = await HttpContext.AuthenticateAsync("Facebook"); 
           if (result.Succeeded) 
           { 
               // Authentication succeeded. Add your logic here. 
               return RedirectToAction("Index", "Home"); 
           } 
           // Authentication failed. Handle the error. 
           return RedirectToAction("Login", "Account"); 
       } 
       public IActionResult FacebookLogin() 
       { 
           var properties = new AuthenticationProperties 
           { 
               RedirectUri = Url.Action("https://localhost:7135/Auth/FacebookCallback"), 
           };  
           return Challenge(properties, FacebookDefaults.AuthenticationScheme); 
       } 
   } 

Step 5: Implement Facebook Login Button 

8. In your `Index.cshtml` or another appropriate view, add a button for Facebook login:

 <h1>Facebook Authentication</h1> 
<button class="btn btn-primary"><a style="color:white" asp-controller="Auth" asp-action="FacebookLogin">Login with Facebook</a></button> 

Step 6: Update App Settings 

9. In the Facebook Developer Portal, update the "Valid OAuth Redirect URIs" with `https://localhost:7135/Auth/FacebookCallback`. 

  •   Login Facebook > Settings.

Step 7: Run and Test 

10. Run your .NET project and test the Facebook authentication by clicking the "Login with Facebook" button. 

  

  •  Click on Login with Facebook > Continue.
  • You can create Successful login in redirect logic.

You Can also use JavaScript SDK to use authenticate in Your project I n our case will use MVC 

  •   Here will use the same app we already create just we will Update the controller action to JS function provided by "Meta Developer" Quick Start

  • Add this JavaScript code in your view where your login button is available 
<button class="btn btn-primary"><a style="color:white" onclick="loginWithFacebook()">Login with Facebook</button>

<script>
    window.fbAsyncInit = function () {
        FB.init({
            appId: '1438230313570431',
            xfbml: true,
            version: 'v19.0'
        });
        FB.AppEvents.logPageView();
    };
    (function (d, s, id) {
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) { return; }
        js = d.createElement(s); js.id = id;
        js.src = "https://connect.facebook.net/en_US/sdk.js";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
    function loginWithFacebook() {
        FB.login(function (response) {
            if (response.authResponse) {
                // User is logged in and authorized your app
                console.log('Successful login for: ' + response.authResponse.userID);
                console.log(response);
                debugger;
                window.location = "https://localhost:44304/Auth/SuccesfullLogin";
            } else {
                // User cancelled login or did not authorize your app
                console.log('Login cancelled');
            }
        }, { scope: 'public_profile,email' }); // Specify the required permissions
    }
</script>
  • Now we Have to add js.src link in your JS functions is need to be Added in Meta developer App

In our case it is : 

 https://connect.facebook.net/en_US/sdk.js
  • will go to again Use cases > customize > settings.
  •  Will add our link in "Allowed Domains for the JavaScript SDK" section

Make sure "Login with the JavaScript SDK" toggle is "Yes".

Now, you have a comprehensive guide for creating a demo on Facebook authentication in a .NET project. Share this guide, and users can follow each step to implement Facebook login functionality in their ASP.NET applications. 

Difference LINQ and Stored Procedures
Mar 20, 2024

Introduction  In the world of database management and querying, two commonly used methods are Language Integrated Query (LINQ) and Stored Procedures. Both serve the purpose of retrieving and manipulating data from databases, but they differ significantly in their approach and implementation. In this blog post, we'll delve into the disparities between LINQ and Stored Procedures to help you understand when to use each. 1. Conceptual Differences:    - LINQ Example:  var query = from p in db.Products                  where p.Category == "Electronics"                  select p;            foreach (var product in query)      {          Console.WriteLine(product.Name);      } In this LINQ example, we're querying a collection of products from a database context (`db.Products`). The LINQ query selects all products belonging to the "Electronics" category.    - Stored Procedures Example: CREATE PROCEDURE GetElectronicsProducts      AS BEGIN     SELECT * FROM Products WHERE Category = 'Electronics' END Here, we've created a Stored Procedure named `GetElectronicsProducts` that retrieves all products in the "Electronics" category from the `Products` table. 2. Performance:    - LINQ: LINQ queries are translated into SQL queries at runtime by the LINQ provider. While LINQ provides a convenient and intuitive way to query data, the performance might not always be optimal, especially for complex queries or large datasets.    - Stored Procedures: Stored Procedures are precompiled and optimized on the database server, leading to potentially better performance compared to dynamically generated LINQ queries. They can leverage indexing and caching mechanisms within the database, resulting in faster execution times. 3. Maintenance and Deployment:    - LINQ: LINQ queries are embedded directly within the application code, making them easier to maintain and deploy alongside the application itself. However, changes to LINQ queries often require recompilation and redeployment of the application.    - Stored Procedures: Stored Procedures are maintained separately from the application code and are stored within the database. This separation of concerns allows for easier maintenance and updates to the database logic without impacting the application code. Additionally, Stored Procedures can be reused across multiple applications. 4. Security:    - LINQ: LINQ queries are susceptible to SQL injection attacks if proper precautions are not taken. Parameterized LINQ queries can mitigate this risk to some extent, but developers need to be vigilant about input validation and sanitation.    - Stored Procedures: Stored Procedures can enhance security by encapsulating database logic and preventing direct access to underlying tables. They provide a layer of abstraction that can restrict users' access to only the operations defined within the Stored Procedure, reducing the risk of unauthorized data access or modification. Conclusion: In summary, both LINQ and Stored Procedures offer distinct advantages and considerations when it comes to querying databases. LINQ provides a more integrated and developer-friendly approach, while Stored Procedures offer performance optimization, maintainability, and security benefits. The choice between LINQ and Stored Procedures depends on factors such as application requirements, performance considerations, and security concerns. Understanding the differences between the two methods can help developers make informed decisions when designing database interactions within their applications.

Ultimate Guide to Website Sitemap Creation
Mar 14, 2024

Introduction:  A sitemap is a crucial element in optimizing your website for search engines. It serves as a roadmap, guiding search engine crawlers through the various pages and content on your site. In this blog post, we'll delve into what sitemaps are, how they are used, and provide step-by-step guidance on creating one. Additionally, we'll explore an alternative method using online sitemap generators.  What is a Sitemap?  A sitemap is essentially a file that provides information about the structure and content of your website to search engines. It lists URLs and includes additional metadata such as the last modification date, change frequency, and priority of each page. The primary purpose is to help search engine bots crawl and index your site more efficiently.  How is a Sitemap Used?  1. Improved Crawling:     Search engines use sitemaps to discover and understand the organization of your website. This aids in more efficient crawling, ensuring that no important pages are missed.  2. Enhanced Indexing:    By providing metadata like the last modification date and change frequency, sitemaps help search engines prioritize and index pages based on their relevance and importance.  3. SEO Benefits:    Having a well-structured sitemap can positively impact your site's search engine optimization (SEO), potentially leading to better visibility in search results.  How to Create a Sitemap:  1. Understand Your Website Structure:  Before creating a sitemap, familiarize yourself with your site's structure, including main pages, categories, and any dynamic content.  2. Choose a Sitemap Generation Method:  Manual Method: Use a text editor to create an XML file, including URLs, last modification dates, etc.  CMS Plugin: If you use a content management system (CMS) like WordPress, leverage plugins such as Yoast SEO or Google XML Sitemaps.  Online Sitemap Generator: Use online tools like XML-sitemaps.com or Screaming Frog to automatically generate a sitemap.  3. Include Relevant Information:  For each URL, include the `<loc>` (URL), `<lastmod>` (last modification date), `<changefreq>` (change frequency), and `<priority>` (priority) tags.  4. Save and Upload:  Save the XML file with a ".xml" extension (e.g., "sitemap.xml"). Upload it to your website's root directory using FTP or your hosting provider's file manager.  5. Submit to Search Engines:  Submit your sitemap to search engines using their webmaster tools (e.g., Google Search Console, Bing Webmaster Tools).  Alternative Method: Using Online Sitemap Generator:  1. Choose a Tool:  Select an online sitemap generator such as XML-sitemaps.com or Screaming Frog.  2. Enter Your Website URL:  Input your website's URL into the generator.     3. Generate and Download:     Click the "Generate" or "Crawl" button to initiate the process.  Once complete, download the generated sitemap file.     4. Upload and Submit:  Upload the downloaded file to your website's root directory and submit it to search engines.    Conclusion:  Creating and submitting a sitemap is a fundamental step in optimizing your website for search engines. Whether you opt for manual creation or use online generators, a well-structured sitemap can significantly contribute to better search engine visibility and improved SEO. Regularly update and submit your sitemap to ensure that search engines stay informed about changes to your site's content. 

Quick Guide: SPROC Performance Check
Jan 27, 2024

Stored procedures are an essential part of database management systems. They are used to execute frequently used queries and reduce the load on the database server. However, if not optimized correctly, they can cause performance issues. In this blog, we will discuss how to check the performance of a stored procedure.  Steps to Check Performance of a SPROC  Identify the SPROC: The first step is to identify the stored procedure that needs to be optimized. You can use SQL Server Management Studio (SSMS) to identify the stored procedure.  Check Execution Time: Once you have identified the stored procedure, you can check its execution time. You can use the SET STATISTICS TIME ON command to check the execution time of the stored procedure.  Check Query Plan: The next step is to check the query plan of the stored procedure. You can use the SET SHOWPLAN_TEXT ON command to check the query plan.  Check Indexes: Indexes play a crucial role in the performance of a stored procedure. You can use the sp_helpindex command to check the indexes of the stored procedure.  Check for Blocking: Blocking can cause performance issues in a stored procedure. You can use the sp_who2 command to check for blocking.  Check for Deadlocks: Deadlocks can also cause performance issues in a stored procedure. You can use the DBCC TRACEON(1204) command to check for deadlocks.  Examples : Here are some examples to help you understand how to check the performance of a stored procedure:    To Try this queries yourself I am sharing the Table, Data, SP query so you can direct run and perform this queries : -- Step 1: Create a dummy table CREATE TABLE dbo.Orders ( OrderID INT PRIMARY KEY, CustomerID NVARCHAR(10), OrderDate DATETIME, ProductID INT, Quantity INT ); -- Step 2: Insert dummy data into the table INSERT INTO dbo.Orders (OrderID, CustomerID, OrderDate, ProductID, Quantity) VALUES (1, N'ALFKI', '2024-01-23', 101, 5), (2, N'ALFKI', '2024-01-24', 102, 3), (3, N'BONAP', '2024-01-25', 103, 7), (4, N'BONAP', '2024-01-26', 104, 2), (5, N'COSME', '2024-01-27', 105, 4); -- Step 3: Create a stored procedure CREATE PROCEDURE dbo.usp_GetOrdersByCustomer @CustomerID NVARCHAR(10) AS BEGIN SELECT * FROM dbo.Orders WHERE CustomerID = @CustomerID; END; Example 1: Check Execution Time  SET STATISTICS TIME ON  EXEC dbo.usp_GetOrdersByCustomer @CustomerID = N'ALFKI'  SET STATISTICS TIME OFF  Example 2: Check Query Plan  SET SHOWPLAN_TEXT ON  EXEC dbo.usp_GetOrdersByCustomer @CustomerID = N'ALFKI'  SET SHOWPLAN_TEXT OFF  Example 3: Check Indexes  EXEC sp_helpindex 'dbo.usp_GetOrdersByCustomer'  Example 4: Check for Blocking  EXEC sp_who2  Example 5: Check for Deadlocks  DBCC TRACEON(1204)    Conclusion  In conclusion, checking the performance of a stored procedure is essential to ensure that it runs efficiently. By following the steps mentioned above, you can identify the performance issues and optimize the stored procedure. I hope this blog helps you in optimizing your stored procedures. If you have any questions or suggestions, please feel free to leave a comment below. 

Hrutvik Barot

About the Author

Hrutvik Barot

Experienced Dotnet developer with nearly 2 years of expertise, adept at crafting robust software solutions. A dedicated and fast learner committed to continuous exploration of cutting-edge technologies for professional and personal growth.