redbitcz / simpleshop-wp-plugin

SimpleShop Wordpress Plugin
https://www.simpleshop.cz/category/wordpress-plugin/
Other
2 stars 1 forks source link

Přinutit uživatele, aby vždy zadali heslo #45

Closed pavel-janicek closed 3 years ago

pavel-janicek commented 4 years ago

Scénář

Uživatel chce přístup do členské sekce Simpleshop. Uživatel chce přístup do členské sekce hned teď Uživatel si přes formulář Simpleshopu koupí přístup do členské sekce a čeká na e-mail s přístupovými údaji, který nepřichází

Problém

Plugin se spoléhá na funkci wp_insert_user která posléze odesílá e-mail uživateli ohledně jeho přístupových údajú přímo z cílového webu, na kterém je plugin nasazen.

Mailing ale na cílovém webu může být nastaven špatně (hodně e-mailů padá do spamu) a nebo vůbec (e-maily vůbec neodchází). Povede to k frustraci uživatele, který si bude stěžovat majiteli webu, který si bude stěžovat podpoře Simpleshopu.

Podpora Simpleshopu se pak bude muset potýkat s majitelem webu, který nemusí být dostatečně technicky zdatný na to, aby nastavil odesílání e-mailů ze svého webu správně.

Řešení

Přinutit uživatele, aby vždy zadával heslo na formuláři simpleshopu. v pluginu pak změníme řádku s generováním hesla na něco takovéhoto:

$_password = $request->get_param( 'password' )

Dále pak pozměníme řádky na získání uživatele na něco takovéhoto:

// Get user_by email
$user    = get_user_by( 'email', $email );
wp_set_password( $request->get_param( 'password' ), $user->ID; );               
$user_id = $user->ID;

Proč proboha neustále měníme heslo?

  1. Protože jej uživatel právě zadal na prodejním formuláři Simpleshopu
  2. Protože uživatelé si nepamatují hesla, takže mu nastavíme heslo, které zrovna zadal
  3. Aby si Simpleshop nemusel pamatovat cokoliv o daném uživateli

Závěr

Ano, je to trochu šílené řešení, které vyžaduje změnu na Simpleshop prodejním formuláři. Zároveň ale řeši situaci, i daný problém:

  1. Uživatel má přístupové údaje do systému hned teď
  2. Nastavení mailového systému na cílovém webu je irelevantní
  3. Simpleshop může heslo "zahodit" hned poté, co se provedl nákup, nevzniká tedy technologická zátěž pro Simpleshop na ukládání uživatelských informací
  4. Uživateli můžeme hned teď napsat, že má uživatelské jméno a heslo, tedy i přístup do členské skce
jakubboucek commented 3 years ago

Po technickém posouzení jsme došli k závěru, že toto není v současné době možné realizovat tak, aby byl mechanismus předávání hesla zabezpečen proti kompromitaci. Důvodem je napojení na systém WordPressu (dále jen WP), který poskytuje určité rozhraní a zároveň flow, které je použito pro zpracování formuláře objednávky.

Správu uživatelského účtu má v dikci výhradně WP a s tím souvisí nutnost správně nastavit odesílání e-mailů z této instance WP, která je zodpovědností každého provozovatele a je zcela mimo účast SimpleShopu (dále jen SS). SS pouze dané instanci WP dá informaci o aktivace členské sekce pro daného uživatele, ale už nemá žádné informace, zda na instanci WP je uživatel založen, nebo se musí vytvořit nový. Proto není ani v jeho možnostech posílat nové heslo – protože pokud již uživatel existuje, nastala by nomá komplikace (heslo ponechat a nebo změnit?).

Z popisu issue to sice vypadá jako jednoduchý úkol, ale fakticky lze požadavku vyhovět pouze komplexním duplikováním logiky správy uživatelů ve WP na straně SS a nebo nezabezpečeným přenášením hesla na servery SS, což nechceme.

Budeme ale v následující verzi měnit způsob práce s e-mailem, který se posílá, aby byl trochu srozumitelnější.

Lituji, že přináším negativní zprávy a děkuju za pochopení.