Rules: átirányítás bejelentkezés után, hacsak nem egyszeri linkről érkezünk

2013. Feb. 27. · 2 min read

A Drupal alaprendszer a /user oldalon való bejelentkezés után a saját profil oldalunkra irányít. A login blokk használatakor pedig arra az oldalra kerülünk vissza, ahol bejelentkezés előtt voltunk.

Időnként azonban szükség lehet arra, hogy a felhasználót egy általunk meghatározható útvonalra tereljük bejelentkezés után. Mi sem egyszerűbb: bevethetjük pl. a Login Destination vagy a LoginToboggan modulokat. Ha azonban egyébként is használjuk a Rules modult, nincs szükség az előbbiekre. Pillanatok alatt összekattinthatunk egy átirányítást. Azonban az egyszeri bejelentkezés működésben tartsa már kicsit izgalmasabb. Haladjunk sorjában!

A Rules rule létrehozása

Egy rule három fő összetevőből áll(hat). Esemény(ek)ből (Events), feltétel(ek)ből (Conditions) és művelet(ek)ből (Actions). A példánkban: Events = User has logged in – vagyis amikor a felhasználó bejelentkezett… –, Actions = Page redirect, Parameter: URL ahova/atiranyitom – …irányítsuk át az ahova/atiranyitom oldalra!

Az átirányítást ezzel le is tudtuk, már csak az egyszeri bejelentkezés működést kell megoldanunk.

Feltétel hozzáadása

Itt lehet eltévedni! Első lépésben a egy legördülő mezőből (Select condition to add) kell kiválasztanunk a feltételt. „Józan paraszti ésszel” azt gondolhatjuk, hogy a Path csoport két lehetséges értéke közül közül kell valamelyiket választanunk. A második lehetőség (URL alias exists) elég „gyanús”, legyen az!

Nézzük a lehetséges behelyettesítési mintákat (Replacement patterns): hohó, hát itt is van nekünk az [account:one-time-login-url] token! Sínen vagyunk. Kiválasztjuk, hozzáadjuk, mentjük és kész, működik, hátradőlhetünk! Hát, sajnos nem.

Hogy miért nem, nem tudom, nem jártam utána. Azonban némi keresgélés után a drupal.org Rules issue-i közül előkerült a működő megoldás. Íme.

  • Condition: Text comparison
  • Data selector: site:current-page:path
  • Matching text value: user/reset
  • Comparison operation value: contains
  • Negate: checked (kipipálva)

Magyarul: nézzük meg az aktuális oldal útvonalának szövegét, hogy ne(!) tartalmazza a user/reset értéket. Ha ez teljesül, akkor lehet végrehajtani az átirányítást. Ez működik.

Most lehet hátradőlni! :o)

PS: Az exportált rule így néz ki:
<br></br>{ "rules_login" : {<br></br> "LABEL" : "Login",<br></br> "PLUGIN" : "reaction rule",<br></br> "TAGS" : [ "User" ],<br></br> "REQUIRES" : [ "rules", "path" ],<br></br> "ON" : [ "user_login" ],<br></br> "IF" : [<br></br> { "NOT text_matches" : { "text" : [ "site:current-page:path" ], "match" : "user\/reset" } }<br></br> ],<br></br> "DO" : [ { "redirect" : { "url" : "frontpage" } } ]<br></br> }<br></br>}<br></br>