Volledige versie bekijken : inloggen met xml
inge88
%Europe/Berlin %482 %2006, 11:35
Ik wil een loginsysteem die kijkt naar de bestaande username's en passwords uit de database (xml bestand). Ik heb momenteel dit hieronder.. bij de functie handleLogin in handleLogin.mxml krijg ik de foutmelding "Cannot access a property or method of a null object reference."
Bestaat er trouwens ook iets dat een password in een xml bestand codeert? Want zo is 't niet echt veilig denk?
loginSystem.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*" viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
private function handleLogin() : void{
Alert.show ("Ingelogd");
}
]]>
</mx:Script>
<local:loginHandle loginEvent="handleLogin()"/>
</mx:Application>
loginHandle.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300"
creationComplete="init()">
<mx:Metadata>
[Event(name="loginEvent", type="flash.events.Event")]
</mx:Metadata>
<mx:Script>
<![CDATA[
import mx.controls.Alert;
private function init () : void{
login.addEventListener("click", handleLogin);
}
private function handleLogin (event: MouseEvent) : void{
if (loginName.text == listMembers.lastResult.members.member.username && passwordText.text == listMembers.lastResult.members.member.password) {
dispatchEvent (new Event ("loginEvent"));
}
else {
Alert.show ("You have entered the wrong username and password, the username and password should be test and test", "error");
}
}
]]>
</mx:Script>
<mx:HTTPService id="listMembers" url="http://localhost:3000/users/list" useProxy="false" method="GET"/>
<mx:Button x="164" y="140" label="Login" id="login"/>
<mx:TextInput x="60" y="80" id="loginName"/>
<mx:TextInput x="60" y="110" id="passwordText" displayAsPassword="true"/>
</mx:Canvas>
Ik ben trouwens bezig met een project van school; een website bouwen met community mogelijkheden + een CMS. Flex & Ruby on Rails zijn nieuw voor mij.
TheDutch
%Europe/Berlin %496 %2006, 11:55
Hoi Inge!
Ik denk dat je die melding krijgt omdat de functie handleLogin() in je loginSystem.mxml private is en niet public. Via een event wordt die functie namelijk aangeroepen maar dat gebeurd buiten loginSystem.mxml dus zou het volgensmij public moeten zijn.
Je zou een wachtwoord kunnen hashen met MD5 en die in XML zetten en vervolgens in Flex het ingevoerde wachtwoord hashen met MD5 via ActionScript en die twee strings dan vergelijken :).
inge88
%Europe/Berlin %503 %2006, 12:04
Ik blijf dezelfde melding krijgen.. als ik ipv listMembers.lastresult.members.member.username/password bv "test" en "test" invul doet hij 't wel.. maar bij mij is 't dus de bedoeling dattie 't uit een database/xml haalt...
TheDutch
%Europe/Berlin %510 %2006, 12:14
Laat je XML eens zien :).
Ik zie trouwens nergens de send() method van HTTPService aangeroepen worden. Dit kan betekenen dat het XML object helemaal niet bestaat en dus NULL is.
inge88
%Europe/Berlin %522 %2006, 12:32
m'n xml...
<?xml version="1.0" encoding="UTF-8" ?>
- <members>
- <member>
<username>inge</username>
<id type="integer">1</id>
<pass>inge</pass>
</member>
</members>
maar er hoeft toch niks verzonden te worden? hij hoeft 't alleen maar op te halen?
TheDutch
%Europe/Berlin %528 %2006, 12:40
Wanneer je de XML wilt ophalen moet je volgensmij wel de send() method aanroepen van de HTTPService. Zet dus listMembers.send() in je init functie :).
inge88
%Europe/Berlin %534 %2006, 12:50
okee:) geen error meer.. maar nu krijg ik ook bij de goede username en password de alert.show bij handleLogin, dus dat 't de verkeerde gegevens zouden zijn.
TheDutch
%Europe/Berlin %544 %2006, 13:03
Ik zou zeggen Alert dan even of je alles juist binnenkrijgt en ook of de IF statement zijn werk goed doet. Debuggen hoort ook bij programmeren ;).
Als je er echt niet uitkomt help ik je vanmiddag of vanavond weer.
inge88
%Europe/Berlin %641 %2006, 15:24
Ik heb net de computer afgesloten en later weer opgestart, nu geeft hij de melding: "unknown property username" bij listMembers.lastResult.members.member.username en als ik daar password van maakt, geeft hij dezelfde melding voor password. Haal ik username en/of password weg dan krijg ik elke keer de melding verkeerd password/username.
Als ik bijvoorbeeld een comboBox maak en de username wil ophalen, krijg ik dezelfde melding.
TheDutch
%Europe/Berlin %647 %2006, 15:32
Dan is het pad naar Username en Password niet goed. Ik zou zeggen check even via Alerts waar de fout zit. Anders moet je echt even wachten tot vanavond :).
inge88
%Europe/Berlin %719 %2006, 17:16
Door in een dataprovider listMembers.lastResult.members.member te zetten en in een labelField pass of username dan wordt de informatie in een comboBox geladen... Er is dus niks mis het het pad..
Ik wacht wel tot vanavond :)
Mediamonkey
%Europe/Berlin %744 %2006, 17:52
Nog even een tipje: het is onverstandig om je accounts dmv xml binnen te halen en op de client te checken. Iedere scriptkiddy kan dat hacken. Wat je zou moeten doen is je login en wachtwoord in je applicatie omzetten tot een MD5 of SHA encrypted string en die naar je server sturen. De server checkt dan of die overeenkomt met de inhoud van een database en stuurt een object met bv userdata (zoals je naam, cookie etc.) terug.
inge88
%Europe/Berlin %747 %2006, 17:55
Thanks voor je tip, maar dat had ik al begrepen... ik wil dit scriptje eerst werkende krijgen voordat ik daarmee begin.
TheDutch
%Europe/Berlin %795 %2006, 19:06
Door in een dataprovider listMembers.lastResult.members.member te zetten en in een labelField pass of username dan wordt de informatie in een comboBox geladen... Er is dus niks mis het het pad..
Ik wacht wel tot vanavond :)
In jouw XML heet de password node niet "password" maar "pass" ;).
inge88
%Europe/Berlin %805 %2006, 19:20
In jouw XML heet de password node niet "password" maar "pass" ;).
Dat weet ik, kwam ik al gauw achter :p heb ik in mijn code ook zo aangepast... maar 't maakt geen verschil..
TheDutch
%Europe/Berlin %811 %2006, 19:28
Ik denk dat er dan een foutje zit in je Ruby on Rails aangezien dit bij mij gewoon werkt (let op de comments):
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300"
creationComplete="init()">
<mx:Metadata>
[Event(name="loginEvent", type="flash.events.Event")]
</mx:Metadata>
<mx:Script>
<![CDATA[
import mx.controls.Alert;
private function init () : void{
login.addEventListener("click", handleLogin);
// ****************
// TOEGEVOEGD!!!
// ****************
listMembers.send();
}
private function handleLogin(event: MouseEvent):void{
// ****************
// AANGEPAST!! Veranderd van "password" naar "pass"
// ****************
if (loginName.text == listMembers.lastResult.members.member.username && passwordText.text == listMembers.lastResult.members.member.pass) {
dispatchEvent (new Event ("loginEvent"));
}
else {
Alert.show ("You have entered the wrong username and password, the username and password should be test and test", "error");
}
}
]]>
</mx:Script>
<!-------------------
AANGEPAST!! URL veranderd naar de XML op mijn server.
--------------------->
<mx:HTTPService id="listMembers" url="http://www.erwinverdonk.com/test.xml" useProxy="false" method="GET"/>
<mx:Button x="164" y="140" label="Login" id="login" />
<mx:TextInput x="60" y="80" id="loginName"/>
<mx:TextInput x="60" y="110" id="passwordText" displayAsPassword="true"/>
</mx:Canvas>
inge88
%Europe/Berlin %857 %2006, 20:34
heb je dan ook verstand van ruby on rails? IK zou niet weten wat er fout aan moet zijn...
het volgende staat in mn controller..
class MembersController < ApplicationController
def create
@members = Members.new(params[:members])
@members.save
render :xml => @members.to_xml
end
def list
@members = Members.find :all
render :xml => @members.to_xml
end
def update
@members = Members.find(params[:id])
@members.update_attributes(params[:members])
render :xml => @members.to_xml
end
def delete
@members = Members.find(params[:id])
@members.destroy
render :xml => @members.to_xml
end
end
TheDutch
%Europe/Berlin %871 %2006, 20:54
Kan je me vertellen wat er in je browser komt wanneer je dit uitvoerd: http://localhost:3000/users/list
inge88
%Europe/Berlin %880 %2006, 21:07
ActiveRecord:: StatementInvalid in UsersController#list
Mysql::Error: #42S02Table 'mjuks_development.users' doesn't exist: SELECT * FROM users
toevallig heb ik ooit zo'n tabel gehad.. ik heb nog wel een oude controller in diezelfde map staan...?
TheDutch
%Europe/Berlin %912 %2006, 21:53
Lijkt me duidelijk. Je hebt in je UsersController een tabel staan die niet meer bestaat in je database. Verander die tabel eens naar de users tabel zoals je die nu hebt in de database :).
inge88
%Europe/Berlin %996 %2006, 23:55
ik snap niet hoe je komt aan http://localhost:3000/users/list ? ik heb namelijk een tabel members + MembersController.. ik heb niks met users te maken? maar met members..
*edit: Ik zie 't nu.. ik had users ipv members staan in de HTTPService in de code die ik hier heb gepost.. vlak nadat ik die code poste kwam ik daarachter.. heb ik dus in members verandert.. maar dat maakt wederom geen verschil...
mijn code ziet er nu dus zo uit:
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300"
creationComplete="init()">
<mx:Metadata>
[Event(name="loginEvent", type="flash.events.Event")]
</mx:Metadata>
<mx:Script>
<![CDATA[
import mx.controls.Alert;
private function init () : void{
login.addEventListener("click", handleLogin);
listMembers.send();
}
private function handleLogin (event: MouseEvent) : void{
if (loginName.text == listMembers.lastResult.members.member.username && passwordText.text == listMembers.lastResult.members.member.pass)
{
dispatchEvent (new Event ("loginEvent"));
}
else
{
Alert.show ("fout!");
}
}
]]>
</mx:Script>
<mx:HTTPService id="listMembers" url="http://localhost:3000/members/list" useProxy="false" method="GET"/>
<mx:Button x="164" y="140" label="Login" id="login"/>
<mx:TextInput x="60" y="80" id="loginName"/>
<mx:TextInput x="60" y="110" id="passwordText" displayAsPassword="true"/>
</mx:Canvas>
Sorry voor 't onduidelijk zijn..
TheDutch
%Europe/Berlin %286 %2006, 06:52
En wat is dan de output in je browser met members ipv. users?
inge88
%Europe/Berlin %452 %2006, 10:51
En wat is dan de output in je browser met members ipv. users?
mijn xml bestand... die er inmiddels zo uitziet:
<?xml version="1.0" encoding="UTF-8" ?>
- <members>
- <member>
<city>Hoogwoud</city>
<username>Inge88</username>
<country>Nederland</country>
<website>http://www.ingevlaar.nl</website>
<id type="integer">1</id>
<description>Ik ben Inge en ik ben 18 jaar oud</description>
<avatar>-</avatar>
<show-email>tr</show-email>
<first-name>Inge</first-name>
<last-name>Vlaar</last-name>
<group type="integer">0</group>
<pass>inge88</pass>
<email>vlaar.i@quicknet.nl</email>
</member>
- <member>
TheDutch
%Europe/Berlin %478 %2006, 11:29
Ik zie een verschil in de letter "i" van je wachtwoord en gebruikersnaam. Wachtwoord is met eem kleine "i" en de gebruikersnaam met een grote "i" :).
inge88
%Europe/Berlin %483 %2006, 11:36
dat klopt ja.. maar wat ik ook intyp.. of 't nou een grote letter is of kleine letter, een goede username/password of een verkeerd... ik krijg de melding: unknown property username en als ik deze verander ik pass.. is het unkown property pass...
Error: Unknown Property: 'username'.
at mx.collections::ListCollectionView/http://www.adobe.com/2006/actionscript/flash/proxy::getProperty()
at loginHandle/::handleLogin()
TheDutch
%Europe/Berlin %489 %2006, 11:45
Klinkt echt als een pad die fout is. Alert het pad eens, kijken of die wel klopt. Anders kan ik je pas vanavond weer helpen :).
inge88
%Europe/Berlin %497 %2006, 11:55
ik krijg dan de melding:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at loginHandle/::handleLogin()
hetzelfde dus...
het pad bestaat echt, want zodra ik een comboBox, datagrid of zoiets maak doet hij het wel... maaaaar dan doe ik 't zo:
<mx:ComboBox dataProvider="{listMembers.lastResult.members.member}" labelField="pass"/>
inge88
%Europe/Berlin %545 %2006, 13:05
okee :S heel raar, maar ik heb de database wederom leeggemaakt en opnieuw ingevuld... nu werkt het gehele script.. ik sta paf...
TheDutch
%Europe/Berlin %975 %2006, 23:24
Waarschijnlijk een spatie ergens te veel ofzo? :).
Goed dat het is opgelost! Happy Flexing...
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.