コンパクトなエディタヘッダー — 大規模なタイトル/タブを削除し、アクションを nav 行に移動
スティッキーヘッダカードを削除します(タイトル、サブタイトル、保存/キャンセル/プレビュー) ボタン、編集/プレビュータブバー、EmailTemplateEditからReclaim〜200px エディタ上の垂直空間。 アクションボタンが右揃え 既存のback-button/breadcrumb nav の行で emai...
検証ページで、各検証/結果の試みの前に必ず***
***は、すべてのアクション(成功または失敗)後にリセットされますので、新鮮な その後の試みごとに解決が必要です.
Switch Postfix sasl_passwd from hash to lmdb format
Alpine postfix build does not include hash support — postmap and smtp_sasl_password_maps were silently failing, deferring every outbound relay attempt through s...
インラインをレンダリングする代わりに登録後の/verificationにリダイレクト
URL を正確に保ちます。ブラウザは /verification ではなく /member を表示します.
Resolve root domain for NoReply from-address instead of bare subdomain
resolvePrimaryDomain() was returning the first domain entry (e.g. "www") which produced NoReply@www. Now prefers root domains (parent == null) so transactional ...
Populate all EMAIL_VERIFICATION template variables
Was sending only {token, code} — template also needs orgName, firstName, verifyLink, and expiryMinutes. Load org and user to build the full vars map, and resolv...
Add internal.auth.secret to EmailService configmap
InternalAuthFilter was rejecting all service-to-service calls (send, seed-org) with 503 because internal.auth.secret was unconfigured. Matches the same INTERNAL...
EMAIL NOT VERIFIED をリダイレクトして登録/リダイレクト
ログインページと関連するすべてのインラインメールVerifyCardを削除します。 状態/コールバック。 EMAIL NOT VERIFIED では、ユーザーは転送されます。 ************************************************************************...
ログインリダイレクト用の /resend-verification ページを追加
?email を受け入れるスタンドアローン /resend-verification ルートを作成します。 ?userId クエリ パラメータ、PostCompletionScreen を一貫して再利用 電子メール検証UX。 registerResponse.alias をオプションで作成する ページは登録エイリアスな...
Allow transactional send on port-25 relay and auto-seed missing templates
Port-25 SMTP (postfix) requires no auth — transactionalCredentials() was throwing ProviderUnavailableException when user/pass were unconfigured, blocking all ve...
Use subdomain-aware SQL to match findByDomain JPQL logic
Org domain lookup in resendVerification was doing an exact-match query that failed for subdomains stored as child records (e.g. 'api' with parent 'kamocrm.com')...
Host/X-Forwarded-Hostを設定すると、APIServiceは正しいorgを解決します
APIServiceは、X-Forwarded-Hostをrequest.getServerName()で上書きします。 Host ヘッダーから。 明示的なホストヘッダがなければ、K8s内部サービス hostname は SecurityService に転送され、org が何も返さないようになっている。 ログインプロ...
Correct EmailService URL port in configmap (4203 -> 80)
EmailService K8s service exposes port 80, not 4203. Verification emails were timing out on every registration attempt.
電子メールの検証画面を再設計+メールのバグを修正
- PostCompletionScreen: アニメーションorgの背景とフルページレイアウト, ガラス形態のカード、ロゴ、視覚6桁のコード ボックス、成功/検証された状態 - resendVerification: リクエストボディでメールを渡す (バックエンドはそれを必要とします)
Bypass JPA org lookup to avoid Hibernate cascade flush error
**************** triggers **************** which causes a Hibernate auto-flush. That flush fails because Organization.features was previously replaced with a pl...
GetOrganizationByDomain から eager 機能読み込みを削除します
特長は、この方法のほとんどの発信者と関連しないorgレベルの懸念です (例:登録、ログインドメインの解像度) setFeatures() で強制読み込み Hibernate-trackedコレクションを交換し、カスケード orphanRemoval エラーを引き起こします。 実際にそれらを必要とするあらゆる発信者のため...
Mutate は、カスケードの orphanRemoval エラーを回避するために、場所内のコレクションを提供しています
Org.setFeatures(newList) を呼び出すと、Hibernate-tracked persistent を置き換えます。 クエリが自動フラッシュをトリガーしたときに、JpaSystemException を引き起こしたコレクション 開いた EntityManager セッション (OpenEntity...
Use getReferenceById to avoid cascade orphanRemoval flush error on registration
Loading Organization via findById inside @Transactional caused Hibernate to detect the features collection was de-referenced during auto-flush, throwing JpaSyst...
認証メールを userId ではなく、X-Forwarded-Host を転送
SecurityService /register/resend-verification は、本文のメールを期待します。 userId (ログインエラー応答が含まれていない) ではありません。 詳しくはこちら X-Forwarded-Hostは、バックエンドが正しい組織を解決できるようにします.
マッチカモ内部アバターストレージ — 3 サイズ、Mino、別々のアップロードステップ
Crop ダイアログがキャンバス、同一で 3 つの PNG blobs (50/150/350px) を生成 kamo-internal's AvatarManager へ。 登録後 userId を返します。 メニュー (新しいunauthenticatedエンドポイント) emailVerified=false で...
Add register-photo endpoint for unauthenticated post-registration avatar upload
POST **************** accepts userId + file/fileSm/fileMd/fileLg without a session. Guards: user must be unverified and have no avatar yet, preventing abuse aga...
EMAIL NOT VERIFIED エラーをリッチな認証カードに置き換える
ログインが EMAIL NOT VERIFIED に失敗すると、ログインカードが置換されます。 洗練された「チェックボックス」画面: アニメーション封筒SVG 開口部の折り返しと フローティングスパークル、マスクされたメール表示、30秒のメールボタンを再送 SVGカウントダウンリング、成功/エラー/レートリミットフィー...
AVIFとSVGフォーマットをサポートするフォトアップロードを拡張
画像/ avif と image/svg+xml をファイル入力の受け入れリストに追加し、 検証レグレックス。 ヒントラベルを更新して、すべての6つのフォーマットをリストします。 kamo-internal は既にイメージ/* を受け付けていますので、その変更は必要ありません.
リアクト・イージー・クロップ・フォト・エディタを追加して、登録画面にアップロード
Kamo-internal's AvatarManager から PhotoCropDialog をミラーリングします。 - ファイル選択直後にcropダイアログが開きます - ドラッグ、スクロールまたはスライダ(1〜5×)によるズーム - アーチ型オーバーレイガイドは、トリミングされた領域を示しています - キャンバ...
Add dao.repositories to JPA scan so EmailTemplateRepository is found
Same pattern as KamoInitializerService — explicit basePackages overrides default scanning and must include every package that has repositories.
一般的なメッセージではなくセキュリティプロキシを介して上流エラーボディを渡す
以前は、non-2xx で {error: "Upstream error"} を返しました。 SecurityService からのエラーメッセージ。 ステータスコードとボディを直接転送します.
Align registration field names and response shape with frontend contract
Frontend sends nameFirst/nameLast but controller read firstName/lastName, causing 400 "First name is required". Success response now returns {status, userId, al...
階段年齢を防止ReqType キャッシュは、年齢チェックを誤って表示する
- Org ルート: 24h から 5min までの Redis TTL を減らし、reqTypeMember を追加 検出を stale するため、DB の変更後にセキュリティ フィールドが新鮮にとどまる - RegisterFlow: デフォルトでは、org がいる間に false に includeAgeChec...
Add SecurityService and dao.repositories to EnableJpaRepositories scan
UserPhoneLookupRepository in recovery package was not picked up because EnableJpaRepositories only listed dao.repos and commerce. Added the SecurityService base...
ブラウザタブのタイトルを 'Register - {org name}' に設定
DynamicMetaLoader は useThemeConfig を呼び出し、ドキュメントを更新します。 タイトル org がロードしたら 'Register - {org.title}' へ。 静的フォールバック in layout.tsx は 'Create Next App' から 'Register' に変...
/api/geoip のルートおよびワイヤー国の自動検出を加えて下さい
クライアント IP を SecurityService GeoLite2 のルックアップにプロキシし、 ページの読み込みに自動的にFormMyCountryで検出された国.
Add GET /api/security/geoip/me for client IP country lookup
Reads real client IP from X-Forwarded-For / X-Real-IP headers, does a GeoLite2 lookup, and returns { country_code, country_name }. Used by kamo-register's count...
宣言とカプチャスタイルのキャストの前に使用されるステップからTSエラーを解決する
メニュー useMemos が useEffects を上回る それらに応じて、CSSVariablesタイプをインポートし、Capchaウィジェットスタイルのプロップに使用します.
Add dao.repositories to EnableJpaRepositories scan
EmailTemplateRepository lives under dao.repositories.email, not dao.repos, so it was not picked up as a Spring bean.
DEFAULT false を email verified カラム定義に追加
HibernateのスキーママイグレータはデフォルトなしでALTER TABLEを生成します。 既存の行でテーブルに失敗します。 columnDefinition はそれを強制します DEFAULT false を含むので、既存の行が正しく入力されます.