{"id":207856,"date":"2024-10-31T08:29:57","date_gmt":"2024-10-31T08:29:57","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/simple-jwt-auth\/"},"modified":"2024-11-17T13:30:38","modified_gmt":"2024-11-17T13:30:38","slug":"simple-jwt-auth","status":"publish","type":"plugin","link":"https:\/\/pcd.wordpress.org\/plugins\/simple-jwt-auth\/","author":23122325,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.2","stable_tag":"1.0.2","tested":"6.7.5","requires":"5.2","requires_php":"7.4","requires_plugins":null,"header_name":"Simple JWT Auth","header_author":"Sayan Dey","header_description":"Extends the WordPress REST API using JSON Web Tokens for robust authentication and authorization. It provides a secure and reliable way to access and manage WordPress data from external applications, making it ideal for building headless CMS solutions.","assets_banners_color":"444444","last_updated":"2024-11-17 13:30:38","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/github.com\/sayandey18","header_plugin_uri":"https:\/\/github.com\/sayandey18\/simple-jwt-auth","header_author_uri":"https:\/\/github.com\/sayandey18","rating":0,"author_block_rating":0,"active_installs":0,"downloads":772,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"sayandey18","date":"2024-10-31 08:47:46"},"1.0.1":{"tag":"1.0.1","author":"sayandey18","date":"2024-10-31 09:04:50"},"1.0.2":{"tag":"1.0.2","author":"sayandey18","date":"2024-11-17 13:30:38"}},"upgrade_notice":{"":"<p>Current version is compatible with previous version, feel free to upgrade.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3179287,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3179287,"resolution":"256x256","location":"assets","locale":""},"icon.svg":{"filename":"icon.svg","revision":3179287,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":3179287,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3179287,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.0.2"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Simple JWT Auth Dashboard","2":"Simple JWT Auth Settings","3":"Simple JWT Auth Options"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[710,185306,38851,185303,23853],"plugin_category":[38],"plugin_contributors":[233896],"plugin_business_model":[],"class_list":["post-207856","plugin","type-plugin","status-publish","hentry","plugin_tags-authentication","plugin_tags-json-web-token","plugin_tags-jwt","plugin_tags-jwt-auth","plugin_tags-rest-api","plugin_category-authentication","plugin_contributors-sayandey18","plugin_committers-sayandey18"],"banners":{"banner":"https:\/\/ps.w.org\/simple-jwt-auth\/assets\/banner-772x250.jpg?rev=3179287","banner_2x":"https:\/\/ps.w.org\/simple-jwt-auth\/assets\/banner-1544x500.jpg?rev=3179287","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/simple-jwt-auth\/assets\/icon.svg?rev=3179287","icon":"https:\/\/ps.w.org\/simple-jwt-auth\/assets\/icon.svg?rev=3179287","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Extends the WordPress REST API using JSON Web Tokens for robust authentication and authorization.<\/p>\n\n<p>JSON Web Token (JWT) is an open standard (<a href=\"https:\/\/tools.ietf.org\/html\/rfc7519\">RFC 7519<\/a>) that defines a compact and self-contained way for securely transmitting information between two parties.<\/p>\n\n<p>It provides a secure and reliable way to access and manage WordPress data from external applications, making it ideal for building headless CMS solutions.<\/p>\n\n<ul>\n<li>Support &amp; question: <a href=\"https:\/\/wordpress.org\/support\/plugin\/simple-jwt-auth\/\">WordPress support forum<\/a><\/li>\n<li>Reporting plugin's bug: <a href=\"https:\/\/github.com\/sayandey18\/simple-jwt-auth\/issues\">GitHub issues tracker<\/a><\/li>\n<\/ul>\n\n<p><strong>Plugins GitHub Repo<\/strong> https:\/\/github.com\/sayandey18\/simple-jwt-auth<\/p>\n\n<h3>Enable PHP HTTP Authorization Header<\/h3>\n\n<p>HTTP Authorization is a mechanism that allows clients to provide credentials to servers, thereby gaining access to protected resources. This is typically achieved by sending a special header, the Authorization header, in the HTTP request.<\/p>\n\n<h4>Shared Hosts<\/h4>\n\n<p>Most shared hosts have disabled the <strong>HTTP Authorization Header<\/strong> by default.<\/p>\n\n<p>To enable this option you'll need to edit your <strong>.htaccess<\/strong> file by adding the following:<\/p>\n\n<pre><code>RewriteEngine on\nRewriteCond %{HTTP:Authorization} ^(.*)\nRewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]\n<\/code><\/pre>\n\n<h4>WPEngine<\/h4>\n\n<p>To enable this option you'll need to edit your .htaccess file adding the follow:<\/p>\n\n<pre><code>SetEnvIf Authorization \"(.*)\" HTTP_AUTHORIZATION=$1\n<\/code><\/pre>\n\n<h3>Configuration<\/h3>\n\n<p>Simple JWT Auth plugin needs a <strong>Signing Key<\/strong> to encrypt and decrypt the <strong>secret key<\/strong>, <strong>private key<\/strong>, and <strong>public key<\/strong>. This signing key must be exact 32 charecter long and never be revealed.<\/p>\n\n<p>To add the <strong>signing key<\/strong> edit your <code>wp-config.php<\/code> file and add a new constant called <strong>SIMPLE_JWT_AUTH_ENCRYPT_KEY<\/strong><\/p>\n\n<pre><code>define( 'SIMPLE_JWT_AUTH_ENCRYPT_KEY', 'your-32-char-signing-key' );\n<\/code><\/pre>\n\n<p>Generate a 32 charecter key from here: <a href=\"https:\/\/string-gen.netlify.app\">https:\/\/string-gen.netlify.app<\/a><\/p>\n\n<p>Here is the sample response if the encryption key is not configured in wp-config.php file.<\/p>\n\n<pre><code>{\n    \"code\": \"simplejwt_bad_encryption_key\",\n    \"message\": \"Encryption key is not configured properly.\",\n    \"data\": {\n        \"status\": 403\n    }\n}\n<\/code><\/pre>\n\n<h3>REST Endpoints<\/h3>\n\n<p>When the plugin is activated, a new namespace is added.<\/p>\n\n<pre><code>\/auth\/v1\n<\/code><\/pre>\n\n<p>Also, two new endpoints are added to this namespace.<\/p>\n\n<pre><code>*\/wp-json\/auth\/v1\/token          | POST\n*\/wp-json\/auth\/v1\/token\/validate | POST\n<\/code><\/pre>\n\n<h3>Requesting\/Generating Token<\/h3>\n\n<p>To generate a new token, submit a POST request to this endpoint. With <code>username<\/code> and <code>password<\/code> as the parameters.<\/p>\n\n<p>It will validates the user credentials, and returns success response including a token if the authentication is correct or returns an error response if the authentication is failed.<\/p>\n\n<pre><code>curl --location 'https:\/\/example.com\/wp-json\/auth\/v1\/token' \\\n--header 'Content-Type: application\/json' \\\n--data-raw '{\n    \"username\": \"wordpress_username\",\n    \"password\": \"wordpress_password\"\n}'\n<\/code><\/pre>\n\n<h4>Sample of success response<\/h4>\n\n<pre><code>{\n    \"code\": \"simplejwt_auth_credential\",\n    \"message\": \"Token created successfully\",\n    \"data\": {\n        \"status\": 200,\n        \"id\": \"2\",\n        \"email\": \"sayandey@outlook.com\",\n        \"nicename\": \"sayan_dey\",\n        \"display_name\": \"Sayan Dey\",\n        \"token\": \"eyJ0eXAiOiJKV1QiLCJhbGciO.........\"\n    }\n}\n<\/code><\/pre>\n\n<h4>Sample of error response<\/h4>\n\n<pre><code>{\n    \"code\": \"simplejwt_invalid_username\",\n    \"message\": \"Error: The username admin_user is not registered on this site. If you are unsure of your username, try your email address instead.\",\n    \"data\": {\n        \"status\": 403\n    }\n}\n<\/code><\/pre>\n\n<p>Once you get the token, you can store it somewhere in your application:<\/p>\n\n<ul>\n<li>using <strong>Cookie<\/strong> <\/li>\n<li>or using <strong>localstorage<\/strong> <\/li>\n<li>or using a wrapper like <a href=\"https:\/\/localforage.github.io\/localForage\/\">localForage<\/a> or <a href=\"https:\/\/pouchdb.com\/\">PouchDB<\/a><\/li>\n<li>or using local database like SQLite<\/li>\n<li>or your choice based on app you develop<\/li>\n<\/ul>\n\n<p>Then you should pass this token as <em>Bearer Authentication<\/em> header to every API call.<\/p>\n\n<pre><code>Authorization: Bearer your-generated-token\n<\/code><\/pre>\n\n<p>Here is an example to create WordPress post using JWT token authentication.<\/p>\n\n<pre><code>curl --location 'https:\/\/example.com\/wp-json\/wp\/v2\/posts' \\\n--header 'Content-Type: application\/json' \\\n--header 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciO.........' \\\n--data '{\n    \"title\": \"Dummy post through API\",\n    \"content\": \"Lorem Ipsum is simply dummy text of the printing and typesetting industry.\",\n    \"status\": \"publish\",\n    \"tags\": [\n        4,\n        5,\n        6\n    ]\n}'\n<\/code><\/pre>\n\n<p>Plugin's middleware intercepts every request to the server, checking for the presence of the <strong>Authorization<\/strong> header. If the header is found, it attempts to decode the JWT token contained within.<\/p>\n\n<p>Upon successful decoding, the middleware extracts the user information stored in the token and authenticates the user accordingly, ensuring that only authorized requests are processed.<\/p>\n\n<h3>Validating Token<\/h3>\n\n<p>This is a helper endpoint to validate a token. You only will need to make a <strong>POST<\/strong> request sending the Bearer Authorization header.<\/p>\n\n<pre><code>curl --location --request POST 'https:\/\/example.com\/wp-json\/auth\/v1\/token\/validate' \\\n--header 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciO.........'\n<\/code><\/pre>\n\n<h4>Sample of success response<\/h4>\n\n<pre><code>{\n    \"code\": \"simplejwt_valid_token\",\n    \"message\": \"Token is valid\",\n    \"data\": {\n        \"status\": 200\n    }\n}\n<\/code><\/pre>\n\n<h3>REST Errors<\/h3>\n\n<p>If the token is invalid an error will be returned, here are some samples of errors.<\/p>\n\n<h4>Invalid Username<\/h4>\n\n<pre><code>{\n    \"code\": \"simplejwt_invalid_username\",\n    \"message\": \"Error: The username admin is not registered on this site. If you are unsure of your username, try your email address instead.\",\n    \"data\": {\n        \"status\": 403\n    }\n}\n<\/code><\/pre>\n\n<h4>Invalid Password<\/h4>\n\n<pre><code>{\n    \"code\": \"simplejwt_incorrect_password\",\n    \"message\": \"Error: The password you entered for the username tiyasha_das is incorrect. Lost your password?\",\n    \"data\": {\n        \"status\": 403\n    }\n}\n<\/code><\/pre>\n\n<h4>Invalid Signature<\/h4>\n\n<pre><code>{\n    \"code\": \"simplejwt_invalid_token\",\n    \"message\": \"Signature verification failed\",\n    \"data\": {\n        \"status\": 403\n    }\n}\n<\/code><\/pre>\n\n<h4>Invalid Token<\/h4>\n\n<pre><code>{\n    \"code\": \"simplejwt_invalid_token\",\n    \"message\": \"Syntax error, malformed JSON\",\n    \"data\": {\n        \"status\": 403\n    }\n}\n<\/code><\/pre>\n\n<h4>Expired Token<\/h4>\n\n<pre><code>{\n    \"code\": \"simplejwt_invalid_token\",\n    \"message\": \"Expired token\",\n    \"data\": {\n        \"status\": 403\n    }\n}\n<\/code><\/pre>\n\n<h4>No Authorization<\/h4>\n\n<pre><code>{\n    \"code\": \"simplejwt_no_auth_header\",\n    \"message\": \"Authorization header not found\",\n    \"data\": {\n        \"status\": 403\n    }\n}\n<\/code><\/pre>\n\n<h4>Bad Authorization<\/h4>\n\n<pre><code>{\n    \"code\": \"simplejwt_bad_auth_header\",\n    \"message\": \"Authorization header malformed\",\n    \"data\": {\n        \"status\": 400\n    }\n}\n<\/code><\/pre>\n\n<h4>Wrong Algorithm Token<\/h4>\n\n<pre><code>{\n    \"code\": \"simplejwt_invalid_token\",\n    \"message\": \"Incorrect key for this algorithm\",\n    \"data\": {\n        \"status\": 403\n    }\n}\n<\/code><\/pre>\n\n<h4>Unsupported Algorithm<\/h4>\n\n<pre><code>{\n    \"code\": \"simplejwt_unsupported_algorithm\",\n    \"message\": \"Unsupported algorithm see https:\/\/tinyurl.com\/uf4ns6fm\",\n    \"data\": {\n        \"status\": 403\n    }\n}\n<\/code><\/pre>\n\n<h4>Bad Configuration<\/h4>\n\n<pre><code>{\n    \"code\": \"simplejwt_bad_config\",\n    \"message\": \"JWT is not configured properly, please contact the admin\",\n    \"data\": {\n        \"status\": 403\n    }\n}\n<\/code><\/pre>\n\n<h4>Bad Encryption Key<\/h4>\n\n<pre><code>{\n    \"code\": \"simplejwt_bad_encryption_key\",\n    \"message\": \"Encryption key is not configured properly.\",\n    \"data\": {\n        \"status\": 403\n    }\n}\n<\/code><\/pre>\n\n<h4>Invalid Encryption Key Length<\/h4>\n\n<pre><code>{\n    \"code\": \"simplejwt_invalid_enckey_length\",\n    \"message\": \"Encryption key must be exactly 32 characters long\",\n    \"data\": {\n        \"status\": 400\n    }\n}\n<\/code><\/pre>\n\n<h3>Available Hooks<\/h3>\n\n<p><strong>Simple JWT Auth<\/strong> is a developer-friendly plugin. It has various filter hooks available to override the default settings.<\/p>\n\n<h4>simplejwt_cors_allow_headers<\/h4>\n\n<p>The <code>simplejwt_cors_allow_headers<\/code> allows you to modify the available headers when the Cross-Origin Resource Sharing (CORS) support is enabled.<\/p>\n\n<p>Default value:<\/p>\n\n<pre><code>'Access-Control-Allow-Headers, Content-Type, Authorization'\n<\/code><\/pre>\n\n<p>Usage example:<\/p>\n\n<pre><code>\/**\n * Change the allowed CORS headers.\n *\n * @param   string $headers The allowed headers.\n * @return  string The allowed headers.\n *\/\nadd_filter(\"simplejwt_cors_allow_headers\", function ($headers) {\n    \/\/ Modify the headers here.\n    return $headers;\n});\n<\/code><\/pre>\n\n<h4>simplejwt_auth_iss<\/h4>\n\n<p>The <code>simplejwt_auth_iss<\/code> allows you to change the <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc7519#section-4.1.1\"><strong>iss<\/strong><\/a> value before the payload is encoded to be a token.<\/p>\n\n<p>Default value:<\/p>\n\n<pre><code>get_bloginfo( 'url' );\n<\/code><\/pre>\n\n<p>Usage example:<\/p>\n\n<pre><code>\/**\n * Change the token issuer.\n *\n * @param   string $iss The token issuer.\n * @return  string The token issuer.\n *\/\nadd_filter(\"simplejwt_auth_iss\", function ($iss) {\n    \/\/ Modify the \"iss\" here.\n    return $iss;\n});\n<\/code><\/pre>\n\n<h4>simplejwt_not_before<\/h4>\n\n<p>The <code>simplejwt_not_before<\/code> allows you to change the <a href=\"https:\/\/tools.ietf.org\/html\/rfc7519#section-4.1.5\"><strong>nbf<\/strong><\/a> value before the payload is encoded to be a token.<\/p>\n\n<p>Default value:<\/p>\n\n<pre><code>time();\n<\/code><\/pre>\n\n<p>Usage example:<\/p>\n\n<pre><code>\/**\n * Change the token's nbf value.\n *\n * @param   int $not_before The default \"nbf\" value in timestamp.\n * @param   int $issued_at The \"iat\" value in timestamp.\n * @return  int The \"nbf\" value.\n *\/\nadd_filter(\n    \"simplejwt_not_before\",\n    function ($not_before, $issued_at) {\n        \/\/ Modify the \"not_before\" here.\n        return $not_before;\n    },\n    10,\n    2,\n);\n<\/code><\/pre>\n\n<h4>simplejwt_auth_expire<\/h4>\n\n<p>The <code>simplejwt_auth_expire<\/code> allows you to change the value <a href=\"https:\/\/tools.ietf.org\/html\/rfc7519#section-4.1.4\"><strong>exp<\/strong><\/a> before the payload is encoded to be a token.<\/p>\n\n<p>Default value:<\/p>\n\n<pre><code>time() + ( DAY_IN_SECONDS * 7 )\n<\/code><\/pre>\n\n<p>Usage example:<\/p>\n\n<pre><code>\/**\n * Change the token's expire value.\n *\n * @param   int $expire The default \"exp\" value in timestamp.\n * @param   int $issued_at The \"iat\" value in timestamp.\n * @return  int The \"nbf\" value.\n *\/\nadd_filter(\n    \"simplejwt_auth_expire\",\n    function ($expire, $issued_at) {\n        \/\/ Modify the \"expire\" here.\n        return $expire;\n    },\n    10,\n    2,\n);\n<\/code><\/pre>\n\n<h4>simplejwt_payload_before_sign<\/h4>\n\n<p>The <code>simplejwt_payload_before_sign<\/code> allows you to modify all the payload data before being encoded and signed.<\/p>\n\n<p>Default value:<\/p>\n\n<pre><code>$payload = [\n    \"iss\" =&gt; $this-&gt;simplejwt_get_iss(),\n    \"iat\" =&gt; $issued_at,\n    \"nbf\" =&gt; $not_before,\n    \"exp\" =&gt; $expire,\n    \"data\" =&gt; [\n        \"user\" =&gt; [\n            \"id\" =&gt; $user-&gt;data-&gt;ID,\n        ],\n    ],\n];\n<\/code><\/pre>\n\n<p>Usage example:<\/p>\n\n<pre><code>\/**\n * Modify the payload data before being encoded &amp; signed.\n *\n * @param   array $payload The default payload\n * @param   WP_User $user The authenticated user.\n * @return  array The payloads data.\n *\/\nadd_filter(\n    \"simplejwt_payload_before_sign\",\n    function ($payload, $user) {\n        \/\/ Modify the payload here.\n        return $payload;\n    },\n    10,\n    2,\n);\n<\/code><\/pre>\n\n<h4>simplejwt_token_before_dispatch<\/h4>\n\n<p>The <code>simplejwt_token_before_dispatch<\/code> allows you to modify the token response before to dispatch it to the client.<\/p>\n\n<p>Default value:<\/p>\n\n<pre><code>$data = new WP_REST_Response(\n    [\n        \"code\" =&gt; \"simplejwt_auth_credential\",\n        \"message\" =&gt; JWTNotice::get_notice(\"auth_credential\"),\n        \"data\" =&gt; [\n            \"status\" =&gt; 200,\n            \"id\" =&gt; $user-&gt;data-&gt;ID,\n            \"email\" =&gt; $user-&gt;data-&gt;user_email,\n            \"nicename\" =&gt; $user-&gt;data-&gt;user_nicename,\n            \"display_name\" =&gt; $user-&gt;data-&gt;display_name,\n            \"token\" =&gt; $token,\n        ],\n    ],\n    200,\n);\n<\/code><\/pre>\n\n<p>Usage example:<\/p>\n\n<pre><code>\/**\n * Modify the JWT response before dispatch.\n *\n * @param   WP_REST_Response $data The token response data.\n * @param   WP_User $user The user object for whom the token is being generated.\n * @return  WP_REST_Response Modified token response data.\n *\/\nadd_filter(\n    \"simplejwt_token_before_dispatch\",\n    function ($data, $user) {\n        \/\/ Modify the response data.\n        if ($user instanceof WP_User) {\n        }\n        return $data;\n    },\n    10,\n    2,\n);\n<\/code><\/pre>\n\n<h3>Credits<\/h3>\n\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/rest-api\/\">WordPress REST API<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/firebase\/php-jwt\">php-jwt by Firebase<\/a><\/li>\n<\/ul>\n\n<!--section=installation-->\n<p>This section describes how to install the plugin and get it working.<\/p>\n\n<h4>Using FTP Client<\/h4>\n\n<ol>\n<li>Download the latest plugin from <a href=\"https:\/\/downloads.wordpress.org\/plugin\/simple-jwt-auth.zip\">here<\/a><\/li>\n<li>Unzip the <code>simple-jwt-auth.zip<\/code> file in your computer.<\/li>\n<li>Upload <code>simple-jwt-auth<\/code> folder into the <code>\/wp-content\/plugins\/<\/code> directory.<\/li>\n<li>Activate the plugin through the 'Plugins' dashboard.<\/li>\n<\/ol>\n\n<h4>Uploading from Dashboard<\/h4>\n\n<ol>\n<li>Download the latest plugin from <a href=\"https:\/\/downloads.wordpress.org\/plugin\/simple-jwt-auth.zip\">here<\/a><\/li>\n<li>Navigate to the Plugins section and click 'Add New Plugin' from the dashboard.<\/li>\n<li>Navigate to the Upload area by clicking on the 'Upload Plugin' button.<\/li>\n<li>Select the <code>simple-jwt-auth.zip<\/code> from your computer.<\/li>\n<li>Click on the 'Install Now' button.<\/li>\n<li>Activate the plugin through the 'Plugins' dashboard.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id='do%20you%20have%20github%20repository%20for%20this%20plugin%3F'><h3>Do you have GitHub repository for this plugin?<\/h3><\/dt>\n<dd><p>Yes, Simple JWT Auth has a GitHub repository. Please visit <a href=\"https:\/\/github.com\/sayandey18\/simple-jwt-auth\">here<\/a> and consider giving us a star.<\/p><\/dd>\n<dt id='i%20am%20a%20developer%2C%20where%20i%20can%20contribute%20to%20this%20project%3F'><h3>I am a developer, Where I can contribute to this project?<\/h3><\/dt>\n<dd><p>Thank you so much. We really appreciate it. Please check our <a href=\"https:\/\/github.com\/sayandey18\/simple-jwt-auth\">github repository<\/a> for more details.<\/p><\/dd>\n<dt id='i%20found%20a%20bug%2C%20where%20i%20can%20report%3F'><h3>I found a bug, where I can report?<\/h3><\/dt>\n<dd><p>Please submit an issue in our support portal. If you are a developer please <a href=\"https:\/\/github.com\/sayandey18\/simple-jwt-auth\/issues\">create a github issue.<\/a><\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.2 (Date: November 17, 2024)<\/h4>\n\n<ul>\n<li>Tested up to WordPress 6.7<\/li>\n<\/ul>\n\n<h4>1.0.1 (Date: October 20, 2024)<\/h4>\n\n<ul>\n<li>Disabled allowing direct file access.<\/li>\n<li>Fixed the undefined variable notice in the admin area.<\/li>\n<li>Bug fixes and improvements.<\/li>\n<\/ul>\n\n<h4>1.0.0 (Date: October 05, 2024)<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>46 git commits so far.<\/li>\n<li>Work for one month during the free time.<\/li>\n<\/ul>","raw_excerpt":"Extends the WP REST API using JSON Web Tokens for robust authentication, providing a secure and reliable way to access and manage WordPress data.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/207856","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=207856"}],"author":[{"embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/sayandey18"}],"wp:attachment":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=207856"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=207856"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=207856"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=207856"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=207856"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=207856"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}