Efficient Solution for Vuelidate Nested Validations: Overcoming Maximum Recursive Updates in Vue.js

To resolve the ‘Maximum recursive updates exceeded’ error in Vue.js, often caused by complex nested validations, the implemented solution involves dividing the validation logic across two distinct components. By avoiding deep nesting, this method simplifies the validation process. Each component (‘First.vue’ and ‘Second.vue’) independently handles its segment of the validation logic using Vuelidate. This separation ensures more manageable and modular code, significantly reducing the risk of triggering recursive update errors that are common in tightly nested validation structures. This approach not only enhances code readability and maintainability but also improves performance by preventing the excessive recursive calls that can occur in deeply nested validation scenarios.

Solving Vue 3 Axios CSRF Token Mismatch with Laravel API

While working with Vue 3 and Laravel APIs, a common issue you might encounter is the “CSRF Token Mismatch” error. This problem arises when Axios, a popular HTTP client for making requests, fails to send the necessary X-XSRF-TOKEN in the request header. This article explains how to resolve this issue by intercepting requests and adding the required token.

Understanding the Problem

The Cross-Site Request Forgery (CSRF) Token Mismatch error typically occurs when a request is made from a local domain to a Laravel API. Laravel expects a CSRF token as a part of the request for security purposes. However, when Axios does not include this token in the header, Laravel rejects the request, leading to an error.

The Solution: Intercepting Requests with Axios

The solution lies in modifying the request before it’s sent. By using Axios’ request interceptors, you can ensure that the X-XSRF-TOKEN is included in every request header. Below is a step-by-step guide on how to implement this.

1. Setting Up Axios Instance

First, create an Axios instance with the necessary configurations:

import axios from 'axios';
import Cookies from 'js-cookie';

const httpApi = axios.create({
  baseURL: process.env.VUE_APP_API_URL,
  withCredentials: true,
  headers: {
    "X-Requested-With": "XMLHttpRequest",
  },
});

Here, withCredentials: true is crucial for sending cookies in cross-origin requests.

2. Adding a Request Interceptor

Next, add a request interceptor to Axios:

httpApi.interceptors.request.use(function (config) {
  const token = Cookies.get('XSRF-TOKEN');
  if (token) {
    config.headers['X-XSRF-TOKEN'] = token;
  }
  return config;
}, function (error) {
  return Promise.reject(error);
});

This interceptor function runs before each request is sent. It retrieves the CSRF token from the cookies using js-cookie and adds it to the request headers.

3. Exporting the Configured Axios Instance

Finally, export the configured Axios instance for use in your Vue components:

export { httpApi };

Conclusion

By intercepting requests and adding the X-XSRF-TOKEN header, you can smoothly integrate Vue 3 with a Laravel API without encountering CSRF Token Mismatch errors. This approach enhances the security of your application while ensuring seamless communication between the client and server.

VS Code Path Intellisense config for JavaScript

Edit/Add jsconfig.json

{
    "compilerOptions": {
      "baseUrl": ".",
      "paths": {
        "@/*": ["src/*"]
      }
    },
    "exclude": ["node_modules", "dist"],
    "include": ["src/**/*.vue", "src/**/*.js"]
  }

Edit VS Code settings.json and add

 "typescript.suggest.paths": false,
 "javascript.suggest.paths": false 

How to enable nginx stub status

How to enable nginx stub status

Edit nginx.conf add in the server { ….. } block/context

location /nginx_status {
	# Turn on nginx stats
	stub_status on;

	# I do not need logs for stats
	access_log   off;

	# Security: Only allow access from your IP address #
	allow your ip address;

	# Send rest of the world to /dev/null #
	deny all;
}

For Plesk edit  /etc/nginx/plesk.conf.d/server.conf

Could not open archive dir for / Could not open archive mbox dir

/usr/local/cpanel/scripts/update_mailman_cache

How to fix the errors

Could not open archive mbox dir for somelist: No such file or directory at /usr/local/cpanel/Cpanel/Mailman/DiskUsage.pm
Could not open archive dir for somelist: No such file or directory at /usr/local/cpanel/Cpanel/Mailman/DiskUsage.pm

Solution

If we have a list named list1_webinformat.com the error is

Could not open archive mbox dir for list1_webinformat.com: No such file or directory at /usr/local/cpanel/Cpanel/Mailman/DiskUsage.pm

and we have to create 2 dirs

mkdir /usr/local/cpanel/3rdparty/mailman/archives/private/list1_webinformat.com.mbox
mkdir /usr/local/cpanel/3rdparty/mailman/archives/private/list1_webinformat.com

After we create the needed directories we run 2 commands

/usr/local/cpanel/scripts/fixmailman

/scripts/update_mailman_cache

Let me know in comments if you need any help or if this helped you.
Happy coding 😉

Hot link protection

Simple hot link protection using .htaccess


 RewriteEngine on
 #RewriteCond %{HTTP_REFERER} !^$
 RewriteCond %{REQUEST_FILENAME} -f
 RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g?|png)$ [NC]
 RewriteCond %{HTTP_REFERER} !^https?://([^.]+\.)?your-domain\. [NC]
 RewriteCond %{HTTP_REFERER} !^https?://([^.]+\.)?google\. [NC]
 RewriteRule \.(gif|jpe?g?|png|bmp)$ http://your-domain/hotlinkdenied [R,L]

  • Replace your-domain with your actual domain name
  • Replace http://your-domain/hotlinkdenied with a valid url

Ubuntu 12.04 – service mysql start start: Job failed to start

Recently after a backup restore MySql server failed to start with the following error message:

start: Job failed to start

To fix start: Job failed to start I had to re-install the MySQL server.

I hope you have a backup of your data because you will lose all your MySQL data running the following commands