[gelöst]erstellte node immer als eingelogged erkannt
Eingetragen von 1000 (764)
am 13.10.2010 - 18:21 Uhr in
am 13.10.2010 - 18:21 Uhr in
hallo,
ich habe eine Node erstellt, welche immer die Hauptlinks in der Navigation anzeigt. Eigendlich dürften diese aber nur authentifizierte User sehen. Ich habe das Modul menu-per-role installiert. Dort habe ich ausdrücklich angehackt, dass nur angemeldete User die einzelnen Menuepunkte sehen dürfen.
Habe per echo die $user->uid ausgegeben. Kurios dabei ist:
Es erscheint eine uid=1 obwohl ich mich abgemeldet habe. Da scheint es einen Bug der node access zu geben oder im Modul menu-per-role
- Anmelden oder Registrieren um Kommentare zu schreiben
So geht das auch nicht
am 13.10.2010 - 22:02 Uhr
Da geht was durcheinander: Denn bei "Menu per Role" steht deutlich:
We wrote "menu items", not "nodes". This module does not prevent users from accessing the destination node. It only changes the visibility of the menu items.
Das Modul ist nur dafür da, um bestimmte Menüpunkte nur bestimmten Rollen anzuzeigen, ja. Aber das schützt nicht den Node selbst. Wer die Adresse kennt, darf darauf zugreifen. Wenn dort immer das Hauptmenü steht, sieht das auch jeder (kommt eben darauf an, wie du das anzeigen lässt). Einen Node musst du anders schützen.
Bei dem uid=1: Keine Ahnung. Wir müssten vielleicht den Code sehen.
Vielleicht hilfen dir ja folgende Module
am 13.10.2010 - 22:23 Uhr
Vielleicht helfen dir ja folgende Module:
Viele Grüße
In den menu per role
am 13.10.2010 - 22:54 Uhr
In den menu per role moduleinstellungen habe ich aber eingestellt, dass menupunkte nicht für Gäste sichtbar sein dürfen. Das Problem ist, dass der Inhalt dieser Node einmal für Gäste(ohne Menu) und ein anderes mal für authentifizierte User (mit menu) sichtbar sein soll. Wenn ich im Code z.B. $user=''; setzte passiert keine Änderung. Ich glaube die module access per node erlauben nur ein generelles Verbot zum Betrachten einer Node. Das kuriose dabei ist, dass die Node node/109 ohne Menu angezeigt wird. Dort gibt es eine Form, die Variablen per Post an node/109/suchergebnisse sendet. Nur bei dieser Unterseite erscheint das Menü obwohl man nicht eingeloggt ist Der Code ist etwas zu lang um Ihn zu posten.
Konfus?
am 13.10.2010 - 23:51 Uhr
Für mich hört sich das recht konfus an. Die Ansicht der Menüs und des Nodes sind mit diesen Modulen erst einmal unabhängig voneinander. Und was soll
$user='';
bedeuten? Hat der Editor da Text verschluckt? Setz den Code mal in ein
<code>
-Element. Warum willst du Userdaten überschreiben?Hast du vielleicht einen Link zum Projekt? Dann kann ich mir das vermutlich besser vorstellen.
Das Problem ist, dass nach
am 14.10.2010 - 13:33 Uhr
Das Problem ist, dass nach Versenden eines Formulars per Post (als Gast) von node/109 zu node/109/suchergebnisse auf einmal aus mir unbegreiflichen Gründen
$user->uid=1
ist. Dies dürfte eigendlich nicht sein, da ich nicht angemeldet bin. Im Code ist auch keinerlei Anweisung zum Setzten dieses Objektes auf 1. Da handelt es sich wohl um einen Bug. Ich schätze die htaccess oder die access control hat Probleme mit dem Versenden von Formularen per Post.
<form name="input" action="https://www.xyz-seite-meine-noch-nicht-fertig.de/node/109/suchergebnisse" method="post">
<table style="border-collapse:separate; ">
<tr>
<td width="25%"></td>
<td align="left" style="padding-left: 8px;"><b>Was</b>
<input type="text" size="34" class="inputbox" alt="Profilsuche" maxlength="40" id="mod_search_searchword" name="qx"><font color="#555555" size=1><b>Suchbegriff oder Firmenname</b></font>
<input type="hidden" name="main" value="1"></td>
<td align="left">
<td align="left" style="padding-left: 8px;"><b>Wo</b>
<input type="text" size="34" class="inputbox" alt="Profilsuche" maxlength="40" id="mod_search_searchword" name="l">
<font color="#555555" size=1><b>Ort oder Postleitzahl</b></font>
<input type="hidden" name="co" value="de">
<input type="hidden" name="test" value="1">
</td>
<td valign="bottom" align="left" style="padding-bottom: 20px;">
<input type="hidden" name="publisher" value="85653115390389">
<input type='image' src='https://www.xyz*******xxxxhier ist-meine-seite.de/sites/all/themes/danland/images/buttonJob.jpg' width='120px' id="fj" name="submit" onclick="this.submit()">
</td><td width="25%"></td>
</tr></table></form>
Dann lasse ich per:
if ($path[0] == 'node' && $path[2] =='suchergebnisse' || $_REQUEST['co']=='de' || $co=='de') {
global $user;
$uid=$user->uid;
echo"USERID $uid";
?>
zum einen Testweise die uid ausgeben, welche erstaunlicherweise auch im ausgeloggten Bereich 1 ergibt also user id des admin und zum Anderen werden dort Suchergebnisse ausgegeben.
mit
$user='';
habe ich versucht diesen Fehler zu beseitigen.In der node/109 ist alles noch ok. Esrt nach dem Versenden der Formulardaten an node/109/suchergebnisse ist $user->uid=1
evt. ist hier ein Fehler drinne:
<?php
//set_time_limit(0);
if(isset($_REQUEST['as_and']) && trim($_REQUEST['as_and']) !="")
$qx = $_REQUEST['as_and'];
elseif(isset($_REQUEST['as_and']) && trim($_REQUEST['as_phr']) !="")
$qx = $_REQUEST['as_phr'];
elseif(isset($_REQUEST['as_and']) && trim($_REQUEST['as_any']) !="")
$qx = $_REQUEST['as_any'];
elseif(isset($_REQUEST['as_and']) && trim($_REQUEST['as_not']) !="")
$qx = $_REQUEST['as_not'];
elseif(isset($_REQUEST['as_and']) && trim($_REQUEST['as_ttl']) !="")
$qx = $_REQUEST['as_ttl'];
elseif(isset($_REQUEST['as_and']) && trim($_REQUEST['as_cmp']) !="")
$qx = $_REQUEST['as_cmp'];
else
$q1 = $_REQUEST['q1'];
$qx = $_REQUEST['qx'];
$qold=$qx;
if($_REQUEST['test']==1)
{
$qx="diplom+"."$qold".",Hochschulabschluss+"."$qold".",Master+"."$qold".",bachelor+"."$qold";
$test=0;
}
global $user;
$userid=$user->uid;
if($userid!='' && $_REQUEST['test']!=1)
{
$x=2;
$sql = "SELECT * FROM {profile_values} WHERE uid = %d and fid=%d";
$result = db_query($sql, $userid, $x);
$row = db_fetch_object($result);
$qold = $row->value;
$qx="diplom+"."$qold".",Hochschulabschluss+"."$qold".",Master+"."$qold".",bachelor+"."$qold";
$test=0;
$publisher='85653115390389';
$co='de';
}
$l = trim($_REQUEST['l']);
if(isset($_REQUEST['jt']) && trim($_REQUEST['jt']) !="")
$jt = $_REQUEST['jt'];
else
$jt = "all";
if(isset($_REQUEST['st']) && trim($_REQUEST['st']) !="")
$st = $_REQUEST['st'];
else
$st = "";
if(isset($_REQUEST['page']) && trim($_REQUEST['page']) != 0)
$start = ($_REQUEST['page']-1) * $_REQUEST['limit'];
else{
if(isset($_REQUEST['start']))
$start = $_REQUEST['start'];
else
$start = 0;
}
if(isset($_REQUEST['fromage']) && trim($_REQUEST['fromage']) !="")
$fromage = $_REQUEST['fromage'];
else
$fromage = "any";
$userip = $_SERVER['REMOTE_ADDR'];
$useragent = $_SERVER['HTTP_USER_AGENT'];
if(isset($_REQUEST['sort']) && trim($_REQUEST['sort']) !="")
$sort = $_REQUEST['sort'];
else
$sort = "";
if(isset($_REQUEST['radius']) && trim($_REQUEST['radius']) !="")
$radius = $_REQUEST['radius'];
else
$radius = 50;
$limit = 8;
if($publisher==''){
$publisher = $_REQUEST['publisher'];
$co = $_REQUEST['co'];
}
$target_url = "http://api.nicht-meine-seite-xxx.url.com/ads/apisearch?publisher=$publisher&q=".str_replace(" ","+",$qx)."&l=$l&co=$co&sort=$sort&radius=$radius&st=$st&jt=$jt&start=$start&limit=$limit&fromage=$fromage";
$userAgent = 'Googlebot/2.1 (http://www.googlebot.com/bot.html)';
// make the cURL request to $target_url
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_URL,$target_url);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_TIMEOUT, 500);
$xmlstring= curl_exec($ch);
$xml = new ParseXml();
$xml->LoadString($xmlstring);
$dataArray = $xml->ToArray();
/*echo '<br>';
echo $dataArray['totalresults'];
echo '<br>';
echo $dataArray['start'];
echo '<br>';
echo $dataArray['end'];
echo '<br>';
*/
if(count($dataArray['results'])==0)
$finalArray[0] = $dataArray['result'];
else
$finalArray = $dataArray['results']['result'];
/*echo '<pre>';
print_r($finalArray);*/
$url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$string = $qx."#".$url."|";
$ftp = fopen("recentsearch.txt","a");
fwrite($ftp,$string);
fclose($ftp);
?>
Es ist devinitiv ein Bug in
am 14.10.2010 - 14:19 Uhr
Es ist devinitiv ein Bug in der Sessions Verwaltung:
session_destroy(); // purge the session record
module_invoke_all('user', 'logout', NULL, $user);
damit bekomme ich die Session beented, die eigendlich nicht exitieren dürfte. Allerdings löst es mein Problem nicht, da auch angemeldete User die Suche nutzen sollten
Da läuft einiges Schief. Irgendein Modul verursacht Konflikte bei der Sessions Verwaltung. Ich habe menu per role im Verdacht. Außerdem wird die Session gecached. Das ist wirklich chaos pur. Kann ich irgendwie verhindern, dass die Sessions gecached werden???
Ich habe das modul subdomains
am 14.10.2010 - 16:27 Uhr
Der Fehler scheint verschwunden. Ich habe in der settings.php die $base_url korrekt angegeben. Dies scheint den Fehler zu beheben. Warum auch immer. Trotz dessen vielen Dank für eure Antworten.