Urgent.News

What's breaking now, across thousands of outlets.

Tech

Passkeys in In-App Browsers: The API Is There, but It Won't Work

I recently added passkeys to a member login page, and LINE's in-app browser gave me one of the sneakiest bugs I've dealt with in a while. The passkey button showed up. Tapping it did nothing. No system prompt, no error, nothing in the console. This post walks through what was going on, plus three things I think anyone shipping passkeys should know: how to tell whether passkeys will actually work,…

A recent addition of passkeys to a member login page revealed a tricky bug when using LINE's in-app browser. The passkey button appeared, but tapping it did nothing, with no error or system prompt. This post explains why passkeys may not work and three key points to consider when implementing them:

1. Checking the API's existence isn't enough: In an in-app browser like LINE, the WebAuthn API exists, but a ceremony cannot run if the app doesn't allow it. To determine if passkeys will work, use the PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable() API to check if the device has a platform authenticator (like Face ID or fingerprint reader) that can verify the user.

This method is widely supported. Alternatively, PublicKeyCredential.getClientCapabilities() (newer from WebAuthn Level 3) returns a set of capabilities, including userVerifyingPlatformAuthenticator, which can be checked for validity. Implement a function like canUsePasskey() that probes the API and returns true if passkeys can be used.

2. NotAllowedError doesn't mean the user cancelled: When a NotAllowedError occurs, it doesn't necessarily mean the user canceled the passkey prompt. Other reasons for the error include system prompt rejection, timeout, or lack of a usable credential. Instead of assuming the user canceled, time the call and treat any prompt rejected within a few milliseconds as passkeys don't work here. This approach helps avoid incorrect assumptions about user interaction with the passkey system.

3. The failure handling mechanism: Restricted WebViews, like LINE's, may return a promise that never resolves or rejects, causing login pages to hang during the check. To mitigate this, implement a timeout mechanism, such as the withTimeout() function provided, to prevent the page from hanging. Additionally, cache the function's result to avoid redundant checks, as login, enrollment, and passkey management all depend on a single answer.

Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.

Read the original at dev.to →

More in Tech

WebDAV over HTTPS: what you actually need

WebDAV over plain HTTP exposes your password. Here's how HTTPS + auth choice works in practice. TL;DR WebDAV defaults to HTTP/80.

  • WebDAV over HTTP exposes credentials during sniffing
  • HTTPS secures WebDAV in production environments
  • Basic Auth offers medium security for home NAS

Summer 2027 Software Engineering Internships: Where They Are and When to Apply

If you're a CS student lining up next summer, this is where the Summer 2027 software engineering cycle stands right now. This first ran on the UTern blog .* Summer 2027 software engineering internship…

  • Summer 2027 software engineering internships start on October 14
  • Over 2,715 internships from 1,043 employers tracked
  • Most students haven't received internship offers yet

Ranking #1 on Google isn't what it used to be.

Ahrefs found that top-ranking pages now get 58% fewer clicks when an AI Overview shows up. Your answer is still being read.

  • Top-ranking web pages see 30% drop in click-through rates with AI Overview
  • Content should answer query directly in first paragraph for AI systems
  • Meta description must concisely convey page content for AI crawlers

More from Monday 19 October →