1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Custom login script

Discussion in 'XenForo Development Discussions' started by Nnirvi, Feb 27, 2014.

  1. Nnirvi

    Nnirvi Member


    I need some customization to xenForo's login. Once the user has entered his credentials, a script would match two custom fields of his profile with two rows in a custom table within the xenForo database. If both match, user gets in. If not, user doesn't get in.

    I have a PHP script which basically does this, I just don't know how can I insert it into xenForo's login. Where do I start?
  2. Jake Bunce

    Jake Bunce XenForo Moderator Staff Member

  3. ScottLott

    ScottLott Member

    Actually, you can setup a hidden login form on the page then use javascript to submit it:

    echo "<div style='display:none;'>";
    echo "<div id="username">$userLogin</div>";
    echo "<div id="pass">$userPass</div>";
    echo "</div>";
    <form action="login/login" method="post" id="pageLogin" style="display:none;">
        <input type="text" name="login" value="" id="ctrl_pageLogin_login" class="textCtrl" required="required" />
        <input type="password" value="" name="password" class="textCtrl" id="ctrl_pageLogin_password" required="required" />
        <input type="checkbox" name="remember" value="1" id="ctrl_pageLogin_remember" style="margin-right:4px;" checked />Stay logged in
        <input type="submit" style="display:block;" class="submitButton newButton" id="login" value="Login"/>
        <input type="hidden" name="cookie_check" value="1" />
        <input type="hidden" name="_xfToken" value="" />
        <input type="hidden" name="redirect" value="/community/find-new/threads?recent=1" />
    document.getElementById('ctrl_pageLogin_password').value = document.getElementById('pass').innerHTML;
    document.getElementById('ctrl_pageLogin_login').value = document.getElementById('username').innerHTML;
  4. Nnirvi

    Nnirvi Member

    I assume that if I change that function, future updates would break the functionality? How do I keep that from happening?

    Any possible caveats in the JS approach?
  5. Nnirvi

    Nnirvi Member

    And where do I find that function?
  6. Nnirvi

    Nnirvi Member

    Ok, found the function and read a good tutorial on how to build an add-on. At the moment it looks like this:

    class validointi_ControllerPublic_validointi extends XFCP_validointi_ControllerPublic_validointi
        public function actionLogin()
            echo "No heippa taas maailma. Loggauduit juuri sisään.";
    Now, this should be ok, I followed the tutorial to the letter where applicable. How could I test this? It doesn't print anything but I guess it's not supposed to. At this point I just want to see that it's working.
  7. Nnirvi

    Nnirvi Member

    I'm starting to get a hang of this, the script runs now. Whatever I type into that actionLogin overwrites the default actionLogin function, right?
  8. Nnirvi

    Nnirvi Member

    Sorry for the spam, making progress here tho, this is pretty cool stuff :) So, now I can execute stuff inside that function, for example sleep(10); worked fine. Alas, echo doesn't work anywhere. I'd need some way to debug the function - to make it print variables somewhere. Any ideas?
  9. ScottLott

    ScottLott Member

    I've never really taken the time to learn how to write PHP correctly inside XenForo, all of my mods (including the one above) are running on PHP files outside XenForo. Makes it simpler, I only have to worry about my PHP/HTML/Javascript not working.

    Sorry I can't be of more help at this point.
  10. Nnirvi

    Nnirvi Member

    Ok, thanks anyways. I just noticed that this thread should be in development discussion, sorry.

    Anyone else have an idea?
  11. ScottLott

    ScottLott Member

    Here's a few things to look into, but I don't know if it'll help:
    - Many of the XenForo controllers have a "viewParams" variable in the PHP file that list variables that are accessible to the templates. For example, the XenForo file that shows the "Alerts" page has the "$alerts" variable in the viewParams on the PHP file.

    If you can get it working that far, variables accessible to a template can be shown by simply putting {$variableName} in the template for the page you're working on. You can even do {xen:helper dump, $variableName} to see the full contents of the variable. That's especially useful if you need to see what's inside an array variable.

    Some useful reading:

    Hope that gets ya going in the right direction. :)
  12. Nnirvi

    Nnirvi Member

    I'm working on a login script so it isn't a page as such. Would it be feasible to define a variable, let's say a string "Hello world" within the actionLogin function and then render it in some template?
  13. ScottLott

    ScottLott Member

    That's the direction I was thinking, maybe you can setup the PHP file to hook into a page node?

    The page nodes can use template syntax in their HTML, I'd assume that's the direction you have to go.
  14. Nnirvi

    Nnirvi Member

    I've already done a similar experiment where an external PHP feeds stuff into a xenForo template and it worked fine. This is a bit different because the modified actionLogin function should do the same. I've made a working plugin that extends the function, at this point it does nothing, it just includes the same stuff as the default actionLogin (by the way, does this overwrite the function or add to it?). I can't hook this file to a template the same way as the previous test as it would try to run the whole actionLogin inside a template.
  15. Dan Allen

    Dan Allen Active Member

    I used the code hidden form and javascript and it works perfectly for what I need.

    But there is something else I need in addition: I need a way to register people in Xen Foro from my external app. Any ideas on how to do that? Same approach?

Share This Page