2010-06-20 16 views
8

के लिए मैं एक पर्ल आवेदन bitlfu.For के लिए लॉग इन यह अपाचे HTTP मूल की तरह कुछ का उपयोग कर रहा प्रमाणीकरण नामित चला रहा हूँ, लेकिन नहीं एक form.I उपयोगकर्ता नाम और पासवर्ड के साथ प्रवेश के लिए फार्म बनाना चाहते खेत। मैंने अब तक कोई परिणाम नहीं के साथ जावास्क्रिप्ट और PHP की कोशिश की है।लॉग इन फार्म HTTP मूल प्रमाणीकरण

तो मुझे मदद चाहिए!

पुनश्च: यूआरएल इस तरह का काम करता है

http://user:[email protected] 

उत्तर

6

मैं की तरह एक साधारण जावास्क्रिप्ट लगता है:

document.location='http://' + user + ':' + pass + '@mydomain.tld'; 

काम करना चाहिए।

<form method="post" onsubmit="javascript:document.location='http://' + $('login') + ':' + $('pass') + '@mydomain.tld';"> 
    <input type="text" name="login" id="login" /> 
    <input type="password" name="pass" id="pass" /> 
    <input type="submit" value="ok"/> 
</form> 

जहां $() एक document.getElementById या jQuery है:

तो मूल रूप से, आप एक रूप है, एक उपयोगकर्ता के साथ जावास्क्रिप्ट का हिस्सा यहाँ दी बनाने के लिए और क्षेत्र से गुजरती हैं, तो ऑनसबमिट, का उपयोग करें या ऐसा। मैंने कोड को कम करने के लिए $() फ़ंक्शन का उपयोग किया। यहां एक कार्यान्वयन है, जो हर ब्राउज़र पर काम नहीं करता है। फिर, क्रॉस ब्राउज़र समाधान के लिए jQuery फेंक देखो।

function $(_id) { return document.getElementById(_id); } 

अन्यथा, आप PHP का उपयोग कर सकते हैं और उपयोगकर्ता को हेडर स्थान के साथ रीडायरेक्ट कर सकते हैं।

php रास्ता:

<?php 

if (isset($_POST['login']) && isset($_POST['password'])) { header('Location: ' . urlencode($_POST['login']) . ':' . urlencode($_POST['password']) . '@domain.tld'); } 
else 
{ 
?> 
<form method="post" onsubmit="javascript:document.location='http://' + $('login') + ':' + $('pass') + '@mydomain.tld';"> 
    <input type="text" name="login" id="login" /> 
    <input type="password" name="pass" id="pass" /> 
    <input type="submit" value="ok"/> 
</form> 

<?php 
} 
+0

नोट: एआईफ़ jQuery का उपयोग करता है। –

+0

Thnx php समाधान काम करता है: D – Pouyan

+1

किसी भी ऐसे व्यक्ति के लिए यह ध्यान देने योग्य है कि यह किसी अन्य एप्लिकेशन के लिए प्रयास करने जा रहा है: उपयोगकर्ता @ पास यूआरएल अब IE में समर्थित नहीं हैं: http://support.microsoft.com/kb/ 834,489 – yoshiwaan

4

आप पर्ल, या जावास्क्रिप्ट का उपयोग के साथ http://user:[email protected] करने के लिए उपयोगकर्ता अनुप्रेषित कर सकते हैं। मुझे पर्ल नहीं पता है इसलिए मैं आपको जेएस दिखाऊंगा:

function submitted() { 
    document.location = "http://" + document.getElementById("username").value + ":" + document.getElementById("password").value + "@host.com"; 
} 

<form onSubmit="submitted">...blablabla...</form> 

यह काम करना चाहिए। एकमात्र समस्या यह है कि यह यूआरएल में पासवर्ड दिखाता है।


भयानक AJAX तरह से jQuery का उपयोग कर:

$.ajax({ 
    'url': 'http://host.com/', 
    //'otherSettings': 'othervalues', 
    username: $("username").val(), 
    password: $("password").val() 
    }, 
    sucess: function(result) { 
    alert('done'); 
    } 
}); 

परम पर्ल रास्ता (मुझे लगता है कि)

$username = # somehow get username 
$password = # somehow get password 
use CGI; 
my $query=new CGI; 
print $query->redirect('http://host.com/'); 
+1

क्षमा करें ले लिया मैं लो मेरा जवाब टाइप करने के लिए, यह आपके से काटा और पेस्ट नहीं किया गया था। – Aif

0

यह एक साधारण प्लग & खेलने समाधान ;-) है। किसी भी डोमेन (और HTTPS पर भी) के लिए काम करेगा:

<script> 
function submitAuthForm() { 
    var login = document.getElementById('login').value; 
    var pass = document.getElementById('pass').value; 
    location = location.href.replace('://', '://' + encodeURIComponent(login) + ':' + encodeURIComponent(pass) + '@'); 
    // might be required to reload on Firefox (FF shows confirmation dialog) 
    setTimeout(function(){ 
     location.reload(true); 
    }, 5000); 
} 
</script> 
<form method="get" onsubmit="submitAuthForm(); return false"> 
    <input type="text" id="login" /> 
    <input type="password" id="pass" /> 
    <input type="submit" value="OK" /> 
</form> 

आप इसे अपने 401 त्रुटि दस्तावेज़ में छोड़ सकते हैं।

ध्यान दें कि return false आवश्यक है ताकि पृष्ठ दो बार पुनः लोड नहीं किया जा सके।

1

URL में उपयोगकर्ता नाम @ पासवर्ड के साथ document.location को स्पष्ट रूप से पुनर्निर्देशित करने की विधि ने मुझे सफारी को फ़िशिंग चेतावनी देने में कुछ समस्याएं उत्पन्न कीं।

यदि मैं इसके बजाय पहले मूल एथ हेडर के साथ एक यूआरएल को AJAX अनुरोध करता हूं, और उसके बाद दस्तावेज़ को पुनर्निर्देशित करता हूं।उपयोगकर्ता नाम के बिना स्थान/URL में पारित तो यह बेहतर करने के लिए मुझे

काम किया उदाहरण

<script 
    src="https://code.jquery.com/jquery-3.2.1.slim.min.js" 
    integrity="sha256-k2WSCIexGzOj3Euiig+TlR8gA0EmPjuc79OEeY5L45g=" 
     crossorigin="anonymous"></script> 
<script> 
$(document).ready(function() { 
    $('form').submit(function() { 
     $.ajax({ 
      url: 'https://efishgenomics.integrativebiology.msu.edu/collaborators/', 
      username: $("#login").val(), 
      password: $("#pass").val() 
     }).done(function() { 
      $("#error_msg").html(""); 
      document.location='https://efishgenomics.integrativebiology.msu.edu/collaborators/'; 
     }).fail(function(result) { 
      console.error(result); 
      $("#error_msg").html("Error logging in: "+result.statusText); 
     }); 
     return false; 
    }); 
}); 
</script> 



<div id="error_msg" style="color: red"></div> 

<form method="post"> 
    Username: 
    <input type="text" name="login" id="login" /> 
    Password: 
    <input type="password" name="pass" id="pass" /> 
    <input type="submit" value="Submit"/> 
</form> 
सफारी के साथ

दुर्भाग्यपूर्ण चेतावनी केवल, यदि आप अपने उपयोगकर्ता नाम और पासवर्ड गलत तरीके से लिखा है, तो यह एक और मानक HTTP मूल प्रमाणीकरण बनाता है पॉपअप, लेकिन यह एक बड़ा लाल "फ़िशिंग चेतावनी" होता है कि जब आप बनाने से बेहतर है document.location शामिल उपयोगकर्ता नाम/पारित

क्रोम डुप्लिकेट पॉपअप नहीं है, तो के लिए लॉग इन प्रमाणिकता गलत हैं हालांकि

संबंधित मुद्दे